Sqlalchemyfilter与filter_by查询语法
distinct查询filter与fileter_by区别
注意
以下⽤法为filter和filter_by语法汇总,因sqlalchemy版本不同可能不适⽤所有版本。
特性:
1. filter⽤类名.属性名,⽐较⽤==,filter_by直接⽤属性名,⽐较⽤=
2. filter不⽀持组合查询,只能连续调⽤filter来变相实现。⽽filter_by的参数是**kwargs,直接⽀持组合查询。
filter与filte_by⽰例
# 要实现组合查询,要么连续调⽤filter:
q = sess.query(IS).de == node).filter(IS.password == password).all()
# 或者直接⽤filter_by:
q = sess.query(IS).filter_by(node=node, password=password).all()
filter查询
1.equal
res =session.query(Article).filter(Article.id ==21).first()
# print(res)
res =session.query(Article).filter(Article.id !=21).all()
# print(res)
3.like & ilike不区分⼤⼩写 & notlike模糊查询,不在查询范围内
# 区分⼤⼩写
res =session.query(Article).filter(Article.title.like('title%')).all()
# print(res)
# 不区分⼤⼩写
res =session.query(Article).filter(Article.title.ilike('title%')).all()
# print(res)
# notlike:模糊查询,不在查询范围内
result1 = db.session.query(Protocols.protocolName).filter(like("%"+"cp"+"%")).all()
4.in
res =session.query(Article).filter(Article.title.in_(['title0','title1'])).all()
# print(res)
< in
# ⽅式⼀
res =session.query(Article).filter(~Article.title.in_(['title0','title1'])).all()
# print(res)
# ⽅式⼆
res =session.query(Article).filter(in_(['title0','title1'])).all()
# print(res)
6.is null
# ⽅式⼀
res =session.query(Article).t == None).all()
# print(res)
# ⽅式⼆
result4 = db.session.query(Protocols.protocolName).filter(Protocols.protocolName.is_(None)).all()
7.is not null
# ⽅式⼀
res =session.query(Article).t != None).all()
# print(res)
# ⽅式⼆
result5 = db.session.query(Protocols.protocolName).filter(Protocols.protocolName.isnot(None)).all()
8 and
# ⽅式⼀
res =session.query(Article).t == None, in_(['title0','title1'])).all()
# print(res)
# ⽅式⼆
db.session.query(User).filter(User.name =='Tom').filter(User.age ==18).all()
# ⽅式三
res =session.query(Article).filter(and_(t == None, in_(['title0','title1']))).all() # print(res)
# ⽅式四
# 以下的⽅式 and 后⾯的 User.age == 18 不会⽣效:
db.session.query(User).filter(User.name =='Tom'and User.age ==18).all()
9 or
res = session.query(Article).filter(
or_(t != None, in_(['title0', 'title1', 'title5']))).all()
print(res)
10 startswith:以某个数据开头
result6 = db.session.query(Protocols.protocolName).filter(Protocols.protocolName.startswith("t")).all()
11 endswith:以某数据结尾
result7 = db.session.query(Protocols.protocolName).filter(dswith("t")).all()
12 contains:数据中包含,和like功能差不多
result8 = db.session.query(Protocols.protocolName).filter(ains("cp")).all()
13 desc & asc 排序
# desc:对查询出来的数据进⾏降序排序
result9 = db.session.query(Protocols.protocolName).order_by(Protocols.id.desc()).all()
# asc:对查询出来的数据进⾏升序排序
result10 = db.session.query(Protocols.protocolName).order_by(Protocols.id.asc()).all()
14 between:某个字段的参数在某个范围内
result11 = db.session.query(Protocols.protocolName).filter(Protocols.id.between(1,3)).all()
15 distinct:对查询出来的数据进⾏去重
result12 = db.session.query(Protocols.parent_protocol).distinct().all()
filter_by 查询
# ⽅式⼀
# node=node and password=password
q = sess.query(IS).filter_by(node=node, password=password).all()
# ⽅式⼆
q = sess.query(IS).filter_by(node=node).all()

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。