sqlalchemy EXCEPT:选择除某些ID之外的所有ID



我正试图在python中使用sqlalchemy查询我的数据库,以选择除ID属于某个列表的行之外的所有行。像这样的东西;

exceptList = [1, 3, 5]
db.query.all() except those in exceptList

我该怎么做?

给定此初始设置:

class Question(db.Model):
id = db.Column(db.Integer, primary_key=True)
category = db.Column(db.String)
db.create_all()
# Assign category alternately: id 1 ->, id 2 -> B etc.
db.session.add_all([Question(category='AB'[n % 2]) for n in range(5)])
db.session.commit()

让我们试着为类别";A";,假设已经提出了问题1-3。

如果你已经有了列表,你可以进行

q = Question.query.filter(Question.id.not_in([1, 2, 3]), Question.category == 'A')
next_question = q.one()
print(next_question.id, next_question.category)

如果必须通过查询获得异常列表,则可以使用EXCEPT子句:

# Create a filter than defines the rows to skip
skip = Question.query.filter(db.or_(Question.id < 4, Question.category == 'B'))
q = Question.query.except_(skip)
next_question = q.one()
print(next_question.id, next_question.category)

本文档部分介绍如何使用except_(尽管它使用UNION作为示例(。

您可以尝试以下内容。

except_list = ["password", "another_column"]
result = session.query(*[c for c in User.__table__.c if c.name not in except_list).all()

最新更新