如果我有User
和Item
模型,并且它们之间存在多对多关联,那么如何构建返回的查询:
(1)属于名为“Bob”
的任何用户的所有项目我试过了:
Item.query.filter(User.name == 'Bob')
返回所有项目而不管用户名称(不正确)
(2)所有名称为“shark”且属于名为“Bob”的用户
的项目我试过了:
Item.query.filter(User.name == 'Bob' & Item.name == 'shark')
与上面相同,但只返回名为“shark”的项目,无论用户名称如何。 (不正确的)
我的模型定义:
association_table = Table('items_users',
Column('itemid', Integer, ForeignKey('item.id'), primary_key=True),
Column('userid', Integer, ForeignKey('user.id'), primary_key=True)
)
class Item(Model):
# other fields...
# many to many association
users = relationship('User', secondary=association_table, lazy='dynamic', backref=backref('items', lazy='dynamic'))
class User(Model):
# other fields...
两个查询的适当语法是什么?
答案 0 :(得分:2)
您需要加入要查询的表,以便过滤一个将过滤与另一个相关联的组合行。由于您已经定义了两个模型之间的关系,因此可以加入它而不是手动指定连接条件。
Item.query.join(Item.users).filter(User.name == 'bob')
Item.query.join(Item.users).filter(User.name == 'bob', Item.name == 'shark')
the comprehensive tutorial in the SQLAlchemy docs中介绍了处理关系和联接。