如何在 Flask SQLAlchemy 中按多个条件进行过滤?
Posted
技术标签:
【中文标题】如何在 Flask SQLAlchemy 中按多个条件进行过滤?【英文标题】:How to filter by multiple criteria in Flask SQLAlchemy? 【发布时间】:2018-02-18 21:05:30 【问题描述】:我有一个如下所示的数据库,它工作正常。现在我有一个名为 Bob 的用户,他拥有空间 Mainspace。我想得到一个布尔值,看看他是否是该空间的所有者。我尝试应用两个过滤器,但出现以下错误。
sqlalchemy.exc.InvalidRequestError: Can't compare a collection to an object or collection; use contains() to test for membership.
命令:
exists = Space.query.filter_by(name="Mainspace", owner="Bob").first()
数据库:
space_access = db.Table('space_access',
db.Column('userid', db.Integer, db.ForeignKey('user.id')),
db.Column('spaceid', db.Integer, db.ForeignKey('space.id')))
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(15), unique=True)
email = db.Column(db.String(50), unique=True)
password = db.Column(db.String(80))
role='admin';
spaces = db.relationship('Space', secondary=space_access, backref=db.backref('owner', lazy='dynamic'))
class Space(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), unique=True)
type = db.Column(db.String(50), unique=True)
【问题讨论】:
filter_by(session.query(MyClass).filter_by(name = 'some name')
。文档包括多条件过滤的情况。
【参考方案1】:
试试这个:
existing = User.query.join(User.spaces).filter(User.username=='Bob', Space.name=='Mainspace').first()
print(existing.id)
if existing != None:
print('Exists')
【讨论】:
以上是关于如何在 Flask SQLAlchemy 中按多个条件进行过滤?的主要内容,如果未能解决你的问题,请参考以下文章
Flask-SQLAlchemy - 会话如何与多个数据库一起工作?
如何在 Flask-SQLAlchemy 中执行多个“order_by”?
在 flask-sqlalchemy 中使用具有相同模型的多个数据库
Flask 学习-85.Flask-SQLAlchemy 多个不确定条件查询