SQLAlchemy - 何时访问Backref / relationship会导致对数据库的查询,何时不会?

时间:2016-06-24 20:45:56

标签: python python-2.7 sqlalchemy flask-sqlalchemy

我无法理解SQLAlchemy何时会对数据库进行查询以及何时不能访问backref或关系。

在什么情况下访问reltionship或backref会导致对数据库的查询?

来自docs

  

与relationship()关联的标量或集合属性包含一个触发器,该触发器在第一次访问该属性时触发。除了一种情况之外,这个触发器在访问点发出SQL调用以加载相关的一个或多个对象......没有发出SQL的一种情况是一个简单的多对一关系,当相关对象可以仅通过其主键来标识,并且该对象已经存在于当前会话中。

显然,对.children的调用将导致SQL:

parent = session.query(Parent).filter_by(id=1).one()
parent.children

此次调用.parent

child = session.query(Child).filter_by(id=1).one()
child.parent

我的假设是上述文件snippit意味着以下对.parent.children的调用都不会导致查询。这是对的吗?

parents = []
children = []
for parent, child in db.session.query(Parent, Child).join(Child):
    parents.append(parent)
    children.append(child)

parents[0].children
children[0].parent

0 个答案:

没有答案