Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将嵌套for循环中的两个查询粘合在一起?_Python_Python 2.7_Sqlalchemy - Fatal编程技术网

Python 如何将嵌套for循环中的两个查询粘合在一起?

Python 如何将嵌套for循环中的两个查询粘合在一起?,python,python-2.7,sqlalchemy,Python,Python 2.7,Sqlalchemy,我可以将此合并到一个查询并使其更快吗 我有TablePerson和Cart(表中的id继承自基本模型) 我需要从人员中查找用户名,并从carts中查找自时间t以来发生的所有carts的数量 result = [] for c in session.query(CartModel).filter(CartMode.ended_at >= t).all(): p = session.query(PersonModel).filter(PersonModel.id == c.person

我可以将此合并到一个查询并使其更快吗 我有TablePerson和Cart(表中的id继承自基本模型)

我需要从人员中查找用户名,并从carts中查找自时间t以来发生的所有carts的数量

result = []
for c in session.query(CartModel).filter(CartMode.ended_at >= t).all():
    p = session.query(PersonModel).filter(PersonModel.id == c.person_id).first()
    if p:
      result.append((p.username, c.quantity))
如何将其粘附到一个查询

session.query(CartModel).join(CartModel.person_id).filter(CartMode.ended_at >= t).all()

参考文档中的这一部分:

除了bpergo的答案之外,我建议您建立关系。我给你一个快速的解决方案,但我强烈推荐阅读。这是一个已经非常好的文档中最有价值的文档之一

简而言之:关系的概念是SQLAlchemy可以自动构建所需的查询:

class PersonModel(Base):
    ...
    carts = relationship("CartModel", backref="person")
通过此修改,您可以非常轻松地执行以下操作:

for c in session.query(CartModel).filter(CartMode.ended_at >= t):
    p = c.person
    ...
但是,您必须注意:仅使用此解决方案,最终可能会出现大量查询(请参阅)。相反,这样做会产生更少的查询:

for c in session.query(CartModel).option(joinedload(PersonModel)).filter(CartModel.ended_at >= t):
    p = c.person
    ...
不,我相信这并不容易理解。但我向你保证,这是值得一读的,因为如果你了解人际关系,SQLAlchemy真的可以让你的手做很多工作

for c in session.query(CartModel).option(joinedload(PersonModel)).filter(CartModel.ended_at >= t):
    p = c.person
    ...