【问题标题】:Flask SQLAlchemy querying a column with "not equals"Flask SQLAlchemy 用“不等于”查询列
【发布时间】: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'))

如何查询所有者不为空的所有席位?

【问题讨论】:

    标签: python sqlalchemy flask flask-sqlalchemy


    【解决方案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 关注完美
    猜你喜欢
    • 2013-07-24
    • 2012-07-16
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 2020-09-19
    • 2018-05-09
    • 2019-04-23
    • 2019-12-13
    相关资源
    最近更新 更多