Python中文
首页
教程
问答
标签
搜索
登录
注册
带有常规属性(不是关系)的SQLAlchemy DetachedInstanceError
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我刚开始使用SQLAlchemy,得到一个DetachedInstanceError,在任何地方都找不到关于它的很多信息。我在会话外部使用实例,因此如果还没有加载任何关系,SQLAlchemy自然无法加载它们,但是,我正在访问的属性不是关系,实际上这个对象根本没有关系。我找到了一些解决方案,比如急切地加载,但是我不能应用于此,因为这不是一个关系。我甚至在关闭会话之前尝试过“触摸”这个属性,但它仍然无法阻止异常。哪种情况会导致非关系属性发生此异常,即使之前已成功访问过该属性一次?如能帮助调试此问题,我们将不胜感激。同时,我将尝试获得一个可复制的独立场景,并在此更新。</p> <p>更新:这是带有几个堆栈的实际异常消息:</p> <pre><code> File "/home/hari/bin/lib/python2.6/site-packages/SQLAlchemy-0.6.1-py2.6.egg/sqlalchemy/orm/attributes.py", line 159, in __get__ return self.impl.get(instance_state(instance), instance_dict(instance)) File "/home/hari/bin/lib/python2.6/site-packages/SQLAlchemy-0.6.1-py2.6.egg/sqlalchemy/orm/attributes.py", line 377, in get value = callable_(passive=passive) File "/home/hari/bin/lib/python2.6/site-packages/SQLAlchemy-0.6.1-py2.6.egg/sqlalchemy/orm/state.py", line 280, in __call__ self.manager.deferred_scalar_loader(self, toload) File "/home/hari/bin/lib/python2.6/site-packages/SQLAlchemy-0.6.1-py2.6.egg/sqlalchemy/orm/mapper.py", line 2323, in _load_scalar_attributes (state_str(state))) DetachedInstanceError: Instance <ReportingJob at 0xa41cd8c> is not bound to a Session; attribute refresh operation cannot proceed </code></pre> <p>部分模型如下所示:</p> <pre><code>metadata = MetaData() ModelBase = declarative_base(metadata=metadata) class ReportingJob(ModelBase): __tablename__ = 'reporting_job' job_id = Column(BigInteger, Sequence('job_id_sequence'), primary_key=True) client_id = Column(BigInteger, nullable=True) </code></pre> <p>而字段client_id正是导致此异常的原因,其用法如下:</p> <p>查询:</p> <pre><code> jobs = session \ .query(ReportingJob) \ .filter(ReportingJob.job_id == job_id) \ .all() if jobs: # FIXME(Hari): Workaround for the attribute getting lazy-loaded. jobs[0].client_id return jobs[0] </code></pre> <p>这就是后来在会话范围之外触发异常的原因:</p> <pre><code> msg = msg + ", client_id: %s" % job.client_id </code></pre>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>即使将<code>expire_on_commit</code>设置为<code>False</code>,我们也会遇到类似的错误。最后,它实际上是由于有两个<code>sessionmaker</code>被用来在不同的请求中创建会话而导致的。我真的不明白发生了什么,但是如果您看到这个异常的<code>expire_on_commit=False</code>,请确保没有初始化两个<code>sessionmaker</code>。</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
将Pandas数据帧转换为PyTorch张量?
6 回答
将Pandas数据帧转换为scipy稀疏矩阵
1 回答
将Pandas数据帧转换为Spark Datafram时出现问题
7 回答
将pandas数据帧转换为spark DataFram时出错
8 回答
将Pandas数据帧转换为spark datafram时收到错误
6 回答
将Pandas数据帧转换为Spark数据帧
1 回答
将Pandas数据帧转换为Tensorflow数据
10 回答
将Pandas数据帧转换为tkinter obj
4 回答
将pandas数据帧转换为XML
7 回答
将Pandas数据帧转换为值sql语句
9 回答
将pandas数据帧转换为元组
6 回答
将pandas数据帧转换为元组列表
1 回答
将pandas数据帧转换为元组列表并删除所有pandas数据类型
7 回答
将pandas数据帧转换为具有头和数据类型的numpy数组
3 回答
将pandas数据帧转换为内存中的拼花地板,并将其加载到Python中的Hadoop中
9 回答
将pandas数据帧转换为内存中类似文件的对象?
7 回答
将Pandas数据帧转换为内存功能(&F)
2 回答
将pandas数据帧转换为列表列表
10 回答
将pandas数据帧转换为列表列表以输入到RNN
10 回答
将Pandas数据帧转换为单行DataFram
4 回答