我目前正在尝试使用声明性方法创建 sqlalchemy 对象,这些对象是“临时”对象,并不意味着持久化,而是简单地进行比较。
因此,我想在当前 session “外部”创建它们。问题是,如果我不一一删除它们, session 会尝试刷新它们,从而创建外键错误(这是正常的,因为对象不完整)。
我一直在使用 sqlalchemy.ext.declarative 中的“declarative_base”来创建基类,然后继承它来创建我的模型对象。 例如(伪代码):
class BaseEntity(object):
... common columns ...
Base = declarative_base(cls=BaseEntity)
class MyObject(Base):
... other columns ..
现在每当我这样做时:
tmpobj = MyObject()
我需要做( session 对象是在另一个模块中声明的scoped_session)
session.expunge(tmpobj)
考虑到我的 tmp 对象的创建方式很复杂(并且相互嵌套),这确实很麻烦。
是否有任何特殊参数可以传递给 MyObject() 构造函数以防止对象添加到 session 中?
最佳答案
好吧,确实,我将这些 tmp 对象添加到托管对象中,从而使它们也由 session 管理。
解决方案是停止使用关系将 tmp 对象链接到托管对象,并改用外键列(我仍然需要保留信息)。
因此,不要这样做(在本例中,使用 backref 关系):
mytmpobject.relationobject = aManagedRelationObject
这样做:
mytmpobject.relationobject_id = aManagedRelationObject.id
这样,mytmpobject 就会保留在 session 之外。
关于python - 在 session 之外创建 SQLAlchemy 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17116277/