关于query.filter()的一些常用的方法

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()

<User(name='fred', fullname='Fred Flinstone', password='blah')>

from_statement():直接使用完整的SQL语句,但是要注意将表名和列名写正确

>>> session.query(User).from_statement(
...                     text("SELECT * FROM users where name=:name")).\
...                     params(name='ed').all()

[<User(name='ed', fullname='Ed Jones', password='f8s7ccs')>]

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')]

猜你喜欢

转载自blog.csdn.net/young_kp/article/details/81199185
今日推荐