没有合适的资源?快使用搜索试试~ 我知道了~
SQLAlchemy技术文档(中文版)
1星 需积分: 45 81 下载量 172 浏览量
2017-09-07
20:45:29
上传
评论
收藏 36KB DOCX 举报
温馨提示
试读
11页
Mysql 数据库 SQLAlchemy技术文档 SQLAlchemy技术文档(中文版)
资源推荐
资源详情
资源评论
SQLAlchemy
技术文档(中文版)(上)
标签:flask
2015-05-04 16:5215917 人阅读评论(1)收藏举报
分类:
python(3)
原文链接:http://www.cnblogs.com/iwangzc/p/4112078.html(感谢作者的分享)
1.版本检查
import sqlalchemy
sqlalchemy.__version__
2.连接
from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:',echo=True)
echo 参数为 True 时,会显示每条执行的 SQL 语句,可以关闭。create_engine()返回一个
Engine 的实例,并且它表示通过数据库语法处理细节的核心接口,在这种情况下,数据库
语法将会被解释称 Python 的类方法。
3.声明映像
当使用 ORM【1】时,构造进程首先描述数据库的表,然后定义我们用来映射那些表的类。
在现版本的 SQLAlchemy 中,这两个任务通常一起执行,通过使用 Declarative 方法,我们
可以创建一些包含描述要被映射的实际数据库表的准则的映射类。
使用 Declarative 方法定义的映射类依据一个基类,这个基类是维系类和数据表关系的目录
——我们所说的 Declarative base class。在一个普通的模块入口中,应用通常只需要有一个
base 的实例。我们通过 declarative_base()功能创建一个基类:
from sqlalchemy.ext.declarativeimportdeclarative_base
Base = declarative_base()
有了这个 base,我们可以依据这个 base 定义任意数量的映射类。一个简单的 user 例子:
from sqlalchemy import Column, Integer, String
class User(Base):
__tablename__= 'users'
id= Column(Integer, primary_key=True)
name = Column(String)
用 Declarative 构造的一个类至少需要一个__tablename__属性,一个主键行。
4.构造模式(项目中没用到)
5.创建映射类的实例
ed_user = User(name='ed',fullname='Ed Jones',
password='edspassword')
6.创建会话
现在我们已经准备毫和数据库开始会话了。ORM 通过 Session 与数据库建立连接的。当应
用第一次载入时,我们定义一个 Session 类(声明 create_engine()的同时),这个 Session 类
为新的 Session 对象提供工厂服务。
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
这个定制的 Session 类会创建绑定到数据库的 Session 对象。如果需要和数据库建立连接,
只需要实例化一个 Session:
session = Session()
虽然上面的 Session 已经和数据库引擎 Engine 关联,但是还没有打开任何连接。当它第一
次被使用时,就会从 Engine 维护的一个连接池中检索是否存在连接,如果存在便会保持连
接知道我们提交所有更改并且/或者关闭 session 对象。
7.添加新对象(简略)
ed_user = User(name='ed', fullname='Ed Jones',
password='edspassword')
session.add(ed_user)
至此,我们可以认为,新添加的这个对象实例仍在等待中;ed_user 对象现在并不代表数据
库中的一行数据。直到使用 flush 进程,Session 才会让 SQL 保持连接。如果查询这条数据
的话,所有等待信息会被第一时间刷新,查询结果也会立即发行。
session.commit()
通过 commit()可以提交所有剩余的更改到数据库。
8.回滚
session.rollback()
9.查询
通过 Session 的 query()方法创建一个查询对象。这个函数的参数数量是可变的,参数可以
是任何类或者是类的描述的集合。下面是一个迭代输出 User 类的例子:
for instance in session.query(User).order_by(User.id):
print instance.name,instance.fullname
Query 也支持 ORM 描述作为参数。任何时候,多个类的实体或者是基于列的实体表达都可
以作为 query()函数的参数,返回类型是元组:
for name, fullname in session.query(User.name,User.fullname):
print name, fullname
Query 返回的元组被命名为 KeyedTuple 类的实例元组。并且可以把它当成一个普通的
Python 数据类操作。元组的名字就相当于属性的属性名,类的类名一样。
for row in session.query(User, User.name).all():
print row.User,row.name
<User(name='ed',fullname='Ed Jones', password='f8s7ccs')>ed
label()不知道怎么解释,看下例子就明白了。相当于 row.name
for row in session.query(User.name.label('name_label')).all():
print(row.name_label)
aliased()我的理解是类的别名,如果有多个实体都要查询一个类,可以用 aliased()
from sqlalchemy.orm import aliased
user_alias = aliased(User, name='user_alias')
for row in session.query(user_alias,user_alias.name).all():
print row.user_alias
Query 的基本操作包括 LIMIT 和 OFFSET,使用 Python 数组切片和 ORDERBY 结合可以让
操作变得很方便。
for u in session.query(User).order_by(User.id)[1:3]:
#只查询第二条和第三条数据
9.1 使用关键字变量过滤查询结果,filter;和filter_by 都适用。【2】使用很简单,下面列出
几个常用的操作:
query.filter(User.name == 'ed') #equals
query.filter(User.name != 'ed') #not equals
query.filter(User.name.like('%ed%')) #LIKE
uery.filter(User.name.in_(['ed','wendy', 'jack'])) #IN
query.filter(User.name.in_(session.query(User.name).filter(User.n
ame.like('%ed%'))#IN
query.filter(~User.name.in_(['ed','wendy', 'jack']))#not IN
query.filter(User.name == None)#is None
query.filter(User.name != None)#not None
from sqlalchemy import and_
query.filter(and_(User.name =='ed',User.fullname =='Ed Jones')) #
and
query.filter(User.name == 'ed',User.fullname =='Ed Jones') # and
query.filter(User.name == 'ed').filter(User.fullname == 'Ed
Jones')# and
from sqlalchemy import or_
query.filter(or_(User.name =='ed', User.name =='wendy')) #or
query.filter(User.name.match('wendy')) #match
9.2.返回列表和数量(标量?)
all()返回一个列表:可以进行 Python 列表的操作。
query =
session.query(User).filter(User.name.like('%ed')).order_by(User.i
d)
query.all()
[<User(name='ed',fullname='EdJones',
password='f8s7ccs')>,<User(name='fred',
fullname='FredFlinstone', password='blah')>]
first()适用于限制一个情况,返回查询到的第一个结果作为标量?:好像只能作为属性,类
query.first()
剩余10页未读,继续阅读
资源评论
- 夏日wei风2018-12-15不全,只有一部分
- weix_李继舟2018-03-06免费的都有, 很一般
- guodongbingtuan2017-09-30内容不多 不怎么全
ZuoHuan_oCaiHong
- 粉丝: 3
- 资源: 16
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- HCIP-Datacom笔记 (1).pdf
- yolov5,SSD 可能使用到的一些代码
- bbbbbbbbbbbbbbbbbb
- 安卓逆向学习笔记之Frida Stalker 还原OLLVM AES.docx
- 安卓逆向学习笔记之unicorn来trace还原OLLVM Base64.docx
- 最新版本私钥助记词碰撞器大富豪使用python进行制作通过接口的方式进行验证支持多币种多链多网络一分钟万次验证高出货率
- 介绍离散性制造行业的MES系统流程
- Arduino IDE压缩包版本,2024年4月26日,最新版本
- 基于IDEA-CCNL/Randeng-Pegasus-238M-Summary-Chines微调的中文文本摘要任务源码+数据集
- 自动驾驶-状态估计和定位之直方图滤波(Histogram+Filter)定位应用和源码.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功