我无法理解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