equals:
query.filter(User.name=='ed')
not equals:
query.filter(User.name!='ed')
like:
query.filter(User.name.like('%ed%'))
in:
query.filter(User.name.in_(['ed','wen','jask']))
not in:
query.filter(~User.name.in_(['ed','wen','jask']))
in null:
query.filter(User.name==None)
is not null:
query.fillter(User.name!=None)
and:
query.filter(and_(User.name=='ed',Username=='ed jones'))
or:
query.filter(or_(User.name= 'ed',User.name=='wendy')
match:
query.filter(User.name.match('wendy'))
match() 使用特定于数据库的匹配或包含函数;它的行为会随着后端而变化,并且在诸如SQLite这样的一些后端是不可用的。
all():
返回一个列表
first():
返回至多一个结果,而且以单项形式,而不是只有一个元素的tuple形式返回这个结果
one():
返回且仅返回一个查询结果。当结果的数量不足一个或者多于一个时会报错
one_or_one():
当结果数量为0时返回None
, 多于1个时报错
scalar():
成功则返回该行的第一列的列号
text():
>>> from sqlalchemy import text
sql>>> for user in session.query(User).\
... filter(text("id<224")).\
... order_by(text("id")).all():
... print(user.name)
ed
wendy
mary
fred
params():传递参数
>>> session.query(User).filter(text("id<:value and name=:name")).\
... params(value=224, name='fred').order_by(User.id).one()
from_statement():直接使用完整的SQL语句,但是要注意将表名和列名写正确
>>> session.query(User).from_statement(
... text("SELECT * FROM users where name=:name")).\
... params(name='ed').all()
[]
count():返回符合条件的总数
>>> session.query(User).filter(User.name.like('%ed')).count()
2
func_count():可以直接指出要测次数的某一项
>>> from sqlalchemy import func
sql>>> session.query(func.count(User.name), User.name).group_by(User.name).all()
[(1, u'ed'), (1, u'fred'), (1, u'mary'), (1, u'wendy')]