![](/img/trans.png)
[英]Possible to add an object to SQLAlchemy session without explicit session.add()?
[英]SQLAlchemy session contains my information without session.add()
我很困惑。 我忘了加
db.session.add(newbranch)
转到下面的代码,只是为了发现它,就像我运行commit()一样,它已经存在于会话中了。
我的研究表明,需要添加新项目。 嗯,正如您在下面的代码中看到的那样,我正在创建新项目,但未添加它们,但是它们被添加了。
谁能帮我理解原因?
在我看来:
newbranch = Branch(
name = newbranch_form.name.data,
account = account)
newbranch_form.populate_assoc(newbranch)
db.session.commit()
辅助函数从我的形式:
def populate_assoc(self, branch_obj):
branch_obj.name = self.name.data
for assoc_obj in branch_obj.equipment_assoc:
db.session.delete(assoc_obj)
for eq, mod in zip(self.equipment, self.mod):
new_assoc = A_branch_eq(
equipment_id = eq.data,
branch = branch_obj,
mod = mod.data)
branch_obj
已经在会话中。 通过分配给关系属性( branch=branch_obj
)将其与A_branh_eq
实例关联时,它们将被添加到brand_obj
已经存在的同一会话中。 仅当会话中没有实例或其关系的任何部分时,才需要显式使用db.session.add
。
控制它的设置是relationship.cascade
。 默认设置包括save-update
选项。
save-update
级联表示,当通过Session.add()
将对象放置到Session
中时,通过此relationship()
与之关联的所有对象也应添加到同一Session
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.