Python SQLAlchemy会话包含没有会话的我的信息。add()

Python SQLAlchemy会话包含没有会话的我的信息。add(),python,session,flask,sqlalchemy,Python,Session,Flask,Sqlalchemy,我只是糊涂了。我忘了加上 db.session.add(newbranch) 对于下面的代码,我发现它已经在会话中了,就像我运行commit()时一样 我的研究表明需要添加新项目。正如您在下面的代码中所看到的,我正在创建新的项目,但没有添加它们,而是添加了它们 有人能帮我理解为什么吗 在我看来: newbranch = Branch( name = newbranch_form.name.data, account = account) newbranch_form.popul

我只是糊涂了。我忘了加上

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)
我的表单中的帮助函数:

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)

分支机构obj
已在会话中。当您通过分配给关系属性(
branch=branch\u obj
)将其与
A_branh\u eq
实例关联时,它们将被添加到
brand\u obj
已经是其一部分的同一会话中。只有当实例的任何部分或其关系都不在会话中时,才需要显式使用
db.session.add

控制这一点的设置是。默认设置包括该选项

save update
cascade表示当通过
Session.add()
将对象放入
会话时,通过该
关系()
与其关联的所有对象也应添加到该
会话中