SQLAlchemy会话包含没有session.add()的信息

Cho*_*key 2 python session sqlalchemy flask

我只是困惑.我忘了添加

db.session.add(newbranch)

到下面的代码,只是为了找出它,不知何故它已经在会话中,因为我运行commit()它工作.

我的研究表明需要添加新项目.好吧,正如你在下面的代码中看到的那样,我正在创建新项目但不添加它们,但它们会被添加.

谁能帮我理解为什么?

从我的观点来看:

newbranch = Branch(
    name = newbranch_form.name.data,
    account = account)

newbranch_form.populate_assoc(newbranch)

db.session.commit()
Run Code Online (Sandbox Code Playgroud)

我的表格中的助手功能:

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)
Run Code Online (Sandbox Code Playgroud)

dav*_*ism 5

branch_obj已经在会议中.A_branh_eq通过分配关系属性(branch=branch_obj)将它与实例相关联时,它们会被添加到brand_obj已经属于的同一会话中.只有db.session.add当实例的任何部分或其关系已经在会话中时,才需要显式使用.

控制它的设置是relationship.cascade.默认设置包括该save-update选项.

save-update级联表示当一个对象被放入一个Sessionvia时Session.add(),所有与它相关的对象relationship()也应该被添加到另一个中Session.