上一篇主要粗略讲了Flask+mysql+sqlalchemy的使用,这次精讲下sqlalchemy的用法,话不多说,上代码。

----------sqlalchemy_test.py

# -*- coding: utf-8 -*-
# Flask hello world
##链接数据库 mysql
from sqlalchemy import *
from sqlalchemy.orm import scoped_session, sessionmaker
###连接数据库
db_connect_string = 'mysql://root:root@127.0.0.1:3306/flask?charset=utf8'
ssl_args = {'ssl':{'cert':'/home//ssl/client-cert.pem',
'key':'/home/shouse/ssl/client-key.pem',
'ca':'/home/shouse/ssl/ca-cert.pem'}
}
engine = create_engine(db_connect_string, connect_args =ssl_args)
SessionType = scoped_session(sessionmaker(bind=engine, expire_on_commit=False)) ###构建连接数据库函数
def get_session():
return SessionType
####创建自动事务函数
from contextlib import contextmanager
@contextmanager
def session_scope():
session = get_session()
try:
yield session
session.commit()
except:
session.rollback()
raise
finally:
session.close()
####开始进行数据库操作
#
#
#
#
'''
class db_admin():
# 表的名字:
__tablename__ = 'db_admin'
# 表的结构:
id = Column(Integer, primary_key=True)
name = Column(String(255))
pwd = Column(String(255))
power = Column(String(20))
date = Column(Date())
'''
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy import create_engine Base = declarative_base()
# 创建单表
class Users(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(32))
extra = Column(String(16)) __table_args__ = (
UniqueConstraint('id', 'name', name='uix_id_name'),
Index('ix_id_name', 'name', 'extra'),
) class Address(Base):
__tablename__ = 'address'
id = Column(Integer, primary_key=True)
address = Column(String(32))
user_id = Column(Integer, ForeignKey('users.id')) ###添加示例
'''
obj = Users(name="alex0", extra='sb')
session.add(obj)
session.add_all([
Users(name="alex1", extra='sb'),
Users(name="alex2", extra='sb'),
])
'''
###创建表
Base.metadata.create_all(engine)
#添加一条数据
def insert(name, fullname):
with session_scope() as session:
insert_data = Users(name = name, extra = fullname)
session.add(insert_data)
#添加多条数据
def insert_data(data):
with session_scope() as session:
session.add_all(data)
if __name__ == '__main__':
#insert('taotao11', 'kk')
'''
data = [m
Users(name = 'xx', extra = '111'),
Users(name = 'xxxx', extra = 'xx3131'),
]
insert_data(data)
'''
####查询数据
with session_scope() as session:
###查询所有
#list = session.query(Users).filter()
###查询== !=
#list = session.query(Users).filter(Users.name=='xx')
##list = session.query(Users).filter(Users.name!='xx')
###like 模糊查询
#list = session.query(Users).filter(Users.name.like('%tao%'))
##过滤器in_
#list = session.query(Users).filter(Users.id.in_([1,3,5,7]))
##查询空值
#list = session.query(Users).filter(Users.name == None)
#list = session.query(Users).filter(Users.name.is_(None))
##非逻辑 在前面加上~
##list = session.query(Users).filter(~Users.id.in_([1,3,5,7]))
####多条件查询 3种方法
#并列条件
#list = session.query(Users).filter(Users.name == 'xx', Users.id>1)
##and_方法
#list = session.query(Users).filter(and_(Users.name == 'xx', Users.id>1))
###多个filter
#list =session.query(Users).filter(Users.name == 'xx').filter(Users.id>1)
#####单一条件并列or_
#list = session.query(Users).filter(or_(Users.name == 'xx', Users.extra=='kk'))
####执行原生sql
#list = session.execute('select * from Users')
'''
for v in list:
print v.id, v.extra, v.name
'''

sqlalchemy精华版的更多相关文章

  1. 一看就懂的ReactJs入门教程(精华版)

    一看就懂的ReactJs入门教程(精华版) 现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和 ...

  2. ReactJs入门教程-精华版

    原文地址:https://www.cnblogs.com/Leo_wl/p/4489197.html阅读目录 ReactJs入门教程-精华版 回到目录 ReactJs入门教程-精华版 现在最热门的前端 ...

  3. Java Web项目案例之---登录和注册(精华版)

    登录和注册(精华版) (一)实现功能 1.使用cookie记录登录成功的用户名,用户选择记住用户名,则用户再次登录时用户名自动显示 2.实现文件上传功能(上传文件的表单上传于普通的表单上传不同,必须是 ...

  4. 【知识学习】Sublime Text 快捷键精华版

    Sublime Text 快捷键精华版 Ctrl+Shift+P:打开命令面板 Ctrl+P:搜索项目中的文件 Ctrl+G:跳转到第几行 Ctrl+W:关闭当前打开文件 Ctrl+Shift+W:关 ...

  5. [感悟]马士兵Java自学之路——(精华版)

    JAVA自学之路 一: 学会选择 为了就业,不少同学参加各种各样的培训. 决心做软件的,大多数人选的是java,或是.net,也有一些选择了手机.嵌入式.游戏.3G.测试等. 那么究竟应该选择什么方向 ...

  6. 一看就懂的ReactJs入门教程-精华版

    现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领 ...

  7. Sublime Text 3 快捷键精华版

    Ctrl+Shift+P:打开命令面板Ctrl+P:搜索项目中的文件Ctrl+G:跳转到第几行Ctrl+W:关闭当前打开文件Ctrl+Shift+W:关闭所有打开文件Ctrl+Shift+V:粘贴并格 ...

  8. java多线程(精华版)

    在 Java 程序中使用多线程要比在 C 或 C++ 中容易得多,这是因为 Java 编程语言提供了语言级的支持.本文通过简单的编程示例来说明 Java 程序中的多线程是多么直观.读完本文以后,用户应 ...

  9. Git的搭建和使用技巧完整精华版

    [Git使用技巧] 1.把一个已经存在于版本库中的文件加入忽略提交文件(.gitignore)中,需要如下代码: git rm --cached [文件路径] 例如: git rm --cached  ...

随机推荐

  1. 什么情况下,英文单词中的k发音变g,t发音变d,p发音变b

    当k,t,p在s发音的后面,且在重读音节中,k,t,p就要发相对应的浊辅音g,d,b.

  2. mysql重复start stop slave测试

    如题,测试重复start slave, stop slave是否会有报错. 版本 5.7.21 重复start slave测试 第一次start >start slave; Query OK, ...

  3. 魔豆应用开发傻瓜书——helloworld

    一.准备 对于使用Windows的朋友,请注意,你们的编译器⼀定要将Dos换⾏符设置变更为Unix换行符,否则在路由器里就会看到每行的最后有一个^M,对于部分命令的正确执⾏是有问题的. 二.建立项目 ...

  4. Sql Server Report Service 的部署问题(Reporting Service 2014為什麼不需要IIS就可以運行)

    http://www.cnblogs.com/syfblog/p/4651621.html Sql Server Report Service 的部署问题 近期在研究SSRS部署问题,因为以前也用到过 ...

  5. libextobjc使用

    pod 'libextobjc' #import "extobjc.h" 使用@weakify(self); @strongify(self)

  6. css居中方法小结

    水平居中 行内元素 如果被设置元素为文本.图片等行内元素时,水平居中是通过给父元素设置 text-align:center 来实现的. 块状元素 当被设置元素为 块状元素 时用 text-align: ...

  7. 黄聪:安装cnpm替代默认的npm

    使用cnpm替代默认的npm: npm install -g cnpm --registry=https://registry.npm.taobao.org

  8. DEVC怎么建工程

    1.DEVC建工程 1.1 新建项目 打开文件,选择新建-->项目-->ConsoleApplication(控制台程序),输入项目名,选择保存路径.(单独建一个文件夹存放) 项目建成功后 ...

  9. SELinux杂谈

    ----------------------------- 文末有推荐参考文档列表--------------------------- SELinux(Security Enhanced Linux ...

  10. Linux ssh服务器配置

    配置文件在/etc/sshd_config,注意只有root可rw,其他所有用户权限为---. 配置说明可参考man sshd_config. 如果更改了服务器端口号,并且启用了SELinux,需要执 ...