父实例未绑定到会话;属性“帐户”的延迟加载操作无法偶尔进行

时间:2019-05-08 04:23:21

标签: python sqlalchemy

SQLAlchemy版本:1.0.17

例如:

class A(Model):
    id = .....
    b = relationship('B')

a = db.session.query(A).options(joinloaded(B)).filter(A.id==1).first()
try:
   function_maybe_raise_exception()
exception:
   do_sth()

if a.b:
    ......

当我访问a.b时,它会引发异常Parent instance 'A' is not bound to a Session; lazy load operation of attribute B cannot proceed,有时会{strong} ,当function_maybe_raise_exception引发异常时

但是显然,我具有joinloaded属性B,即使对象a处于detached状态,从理论上讲我也可以访问a.b

背景:

  1. session对象是scoped_session()
  2. 我的应用程序以多线程
  3. 运行
  4. sqlalchemy版本有些旧
  5. 在生产环境中,有时会在其他异常发生时引发此异常。在我的测试环境中,我无法重现该问题

我猜:

  1. 这是sqlalchemy中的错误吗?因为我有joinloaded的关系
  2. 在多线程环境中,session的行为不可预测 3.对象a已在其他线程中更改导致此异常?

我的问题是

不应抛出该异常,因为我具有joinloaded属性。但是在生产中偶尔会出现。

我出了什么问题而错过了什么吗?

0 个答案:

没有答案