【发布时间】:2013-03-05 19:55:40
【问题描述】:
我正在使用 Flask-SQLAlchemy 在 Flask 中工作,并尝试建立多对多对多的关系:客户可以有多个订单,订单也可以有多个客户(多对多);每个订单又包含一个独特项目的列表(一对多)。
我按照SQLAlchemy文档为多对多关系建立了关联表,一对多关系使用普通关系/外键;所有引用都设置为lazy='dynamic'。
association_table = Table('association', Base.metadata,
Column('left_id', Integer, ForeignKey('left.id')),
Column('right_id', Integer, ForeignKey('right.id'))
)
检索与客户端关联的所有items 的有效方法是什么?我假设[item for item in order.items.all() for order in client.orders] 会起作用(少了上面的问题),但是有没有更有效的方法呢?如果结果需要排序怎么办?
更新
我现在知道通过以下两种方法(Audrius 的回答中的第一种)为客户的订单检索商品的两种方法:
db.session.query(Item).\
join(Order).join(Order.clients).\
filter(Client.id == 42).\
order_by(Item.timestamp)
和
Item.query.filter(Item.order_id._in(client.order_ids)).order_by(Item.timestamp)
我相信它们都提供了相同的结果,但为了提高效率应该首选哪一个?
【问题讨论】:
标签: python sql postgresql sqlalchemy flask-sqlalchemy