SQLAlchemy查询常用方法
目录
|
|
使用SQLAlchemy的session进行数据库查询时,会产生Query
类的实例:
class sqlalchemy.orm.query.Query
以下是Query类一些常用的方法。
筛选
filter_by()
传入a=b
格式的参数。
filter()
传入Class.a!=b
表达式格式的参数。
limit(n)
限制返回n个结果。
offset(m)
从第m+1个结果开始返回。
slice(start, stop)
切片返回结果,类似limit和offset的组合。相当于offset(start).limit(stop-start)
。
结果
all()
将所有结果组成一个list返回。
first()
- 没有查询结果时,返回
None
; - 其他情况下,返回第一个查询结果;
one()
仅在查询结果为一个时返回结果,否则抛出错误。
- 没有查询结果时,抛出
sqlalchemy.orm.exc.NoResultFound
; - 一个查询结果时,返回该对象;
- 当查询结果为多个时,抛出
sqlalchemy.orm.exc.MultipleResultsFound
;
one_or_none()
- 没有结果,返回
None
; - 一个查询结果时,返回该对象;
- 当查询结果为多个时,抛出
sqlalchemy.orm.exc.MultipleResultsFound
;
scalar()
- 没有结果,返回
None
; - 一个结果,返回查询结果的第一个元素;
- 多个结果,抛出
sqlalchemy.orm.exc.MultipleResultsFound
;
count()
返回查询到的结果个数。如果没有数据,返回0。
操作
get(ident)
查询操作。传入主键ID,返回对象或者None
。
update(values, synchronize_session=‘evaluate’, update_args=None)
更新操作。举个栗子:
|
|
with_lockmode(mode)
锁操作。mode取值如下:
None
- 取消锁;update
- 被转义为SQL语句FOR UPDATE
(标准SQL,大部分数据库支持);update_nowait
- 被转义为SQL语句FOR UPDATE NOWAIT
(仅支持Oracle、PostgreSQL 8.1+版本);read
- 被转义为LOCK IN SHARE MODE
(MySQL数据库),FOR SHARE
(PostgreSQL数据库)。
函数
func.sum
对查询到的记录的字段进行求和,如果记录不存在,结果为None,不是0。