Flask SQLAlchemy 用“不等于”查询列
Posted
技术标签:
【中文标题】Flask SQLAlchemy 用“不等于”查询列【英文标题】:Flask SQLAlchemy querying a column with "not equals" 【发布时间】:2013-04-12 04:32:10 【问题描述】:我可以在我的Seat
表中查询没有分配邀请的所有席位:
seats = Seat.query.filter_by(invite=None).all()
但是,当查询分配了邀请的所有席位时,我得到一个NameError
:
seats = Seat.query.filter_by(invite!=None).all()
NameError: name 'invite' is not defined
这是我的Seat
课程:
class Seat(db.Model):
id = db.Column(db.Integer, primary_key=True)
invite_id = db.Column(db.Integer, db.ForeignKey('invite.id'))
invite = db.relationship('Invite',
backref=db.backref('folks', lazy='dynamic'))
如何查询所有者不为空的所有席位?
【问题讨论】:
【参考方案1】:filter_by()
方法采用一系列关键字参数,因此您必须始终使用 =
。
您想使用允许!=
的filter()
方法:
seats = Seat.query.filter(Seat.invite != None).all()
【讨论】:
PEP 8:与None的比较应该是'if cond is not None:',所以推荐Seat.invite is not None
【参考方案2】:
我认为这会有所帮助 http://docs.sqlalchemy.org/en/rel_0_9/core/sqlelement.html#sqlalchemy.sql.operators.ColumnOperators.isnot
没有
query.filter(User.name == None)
或者,如果 pep8/linter 是一个问题query.filter(User.name.is_(None))
不是无
query.filter(User.name != None)
或者,如果 pep8/linter 是一个问题
query.filter(User.name.isnot(None))
【讨论】:
你也可以使用#NOQA 我试图从标签字段中过滤掉任何值,它似乎不起作用:q = session.query(Table1.id, (Table2.column1 + Table2.column2).label('table2_sum')).filter(q.c.table2_sum!=None)
给我在声明错误之前使用的 q 和q = q.filter(q.c.table2_sum!=None)
给我“查询对象没有属性 c 错误”...
你必须先定义 q 才能使用它。尝试`q = session.query(Table1.id, (Table2.column1 + Table2.column2).label('table2_sum')) q = q.filter((Table2.column1 + Table2.column2)!=None) ` 和告诉我
pep8 关注完美以上是关于Flask SQLAlchemy 用“不等于”查询列的主要内容,如果未能解决你的问题,请参考以下文章
Flask 学习-85.Flask-SQLAlchemy 多个不确定条件查询
Flask 学习-85.Flask-SQLAlchemy 多个不确定条件查询
FLASK-SQLALCHEMY如何使用or和and条件进行组合查询