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查询最后一条记录

FLASK-SQLALCHEMY如何使用or和and条件进行组合查询

Flask 学习-94.Flask-SQLAlchemy 按日期时间查询

flask_SQLALchemy之多表查询