python - 在 session 之外创建 SQLAlchemy 对象

标签 python sqlalchemy

我目前正在尝试使用声明性方法创建 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/

相关文章:

python - 在 Pycharm 中查找依赖于导入包的所有引用

sqlalchemy - 我应该如何将 Plone 产品从 Collective.lead 移植到 z3c.saconfig?

python - 如何通过指定模式从 postgresql 数据库中获取行?

python - 如何在 Flask-SQLAlchemy 应用程序中执行原始 SQL

python - 具有继承的 SQLAlchemy 类的一对一删除

python - swig:如何在 Python 中访问 C 数组

python - 我如何让这个文本动画在pygame中显示

python - 令人尴尬的并行 for 循环,每次迭代中都有复杂的输出

python模块层次结构命名约定

python - AttributeError : 'IntegrityError' object has no attribute 'message' SQLAlchemy