小编Kyo*_*reG的帖子

sqlalchemy对象如何分离?

我的代码结构如下:

project
--app
----utils
------util.py
----__init__.py
----models.py
--tests
----__init__.py
Run Code Online (Sandbox Code Playgroud)

在tests/__ init__.py中,我有一些代码可以通过从app/__ init__.py导入所有应用程序来初始化应用程序(如果重要的话,那就是瓶子)和数据库会话.我可以在tests/__ init__.py中创建模型,查询和访问backrefs的实例.以下表格的代码可以正常工作:

objs = SomeModel.query.all()
for o in objs:
    o.backref
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做:

from utils.util import some_function
objs = SomeModel.query.all()
for o in objs:
    some_function(o)
Run Code Online (Sandbox Code Playgroud)

some_function只是访问backref

def some_function(obj):
    obj.backref
Run Code Online (Sandbox Code Playgroud)

我得到一个错误 DetachedInstanceError: Parent instance <SomeModel at 0x2c1fe10> is not bound to a Session; lazy load operation of attribute 'backref' cannot proceed

阅读sqlalchemy文档表明我需要将对象重新关联到数据库sesssion.我这样做了,看起来它的工作原理(即运行该函数不会因上一个错误而失败):

import db_session
def some_function(obj):
    db_session.add(obj)
    obj.backref
Run Code Online (Sandbox Code Playgroud)

那么当一个物体到底是什么时候分开了?似乎只是将对象传递给另一个模块中的函数将其从会话中分离出来.对象是否不知道与之关联的sqlalchemy会话?我试图避免这样做db_session.add(obj)似乎很多样板代码.

python sqlalchemy flask flask-sqlalchemy

6
推荐指数
1
解决办法
2583
查看次数

标签 统计

flask ×1

flask-sqlalchemy ×1

python ×1

sqlalchemy ×1