繁体   English   中英

SQLAlchemy会话包含我的信息,而没有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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM