blu*_*ank 15 python sqlalchemy
所以,使用和学习sqlalchemy.
我有一个实例,我需要得到一个值.如果该值存在,则返回它.如果不计算并返回它.
总有人会说"你做错了",总的来说,对改进的投入是值得赞赏的.但是,我正在研究如何在不明确管理会话的情况下完成此操作,因为我正在开发的工作正在开始增长,并且在我想要更新实例时不断管理会话是有问题的.这让我觉得我是其实这样做是错误的.
那么如何修复下面的方法以不明确管理会话?
def method(self, session):
if self.i_needed_this is None:
self.i_needed_this = calculate(calcutron)
session.add(self)
session.commit()
return self.i_needed_this
else:
return self.i_needed_this
Run Code Online (Sandbox Code Playgroud)
也许这个问题应该标题为"让实例会话意识到所以我并不总是明确地管理它",如果这是一个愚蠢的问题,至少告诉我为什么用例子并指出我其他人要求更好的地方.
编辑:显然,导入我正在使用作品的会话,它是可用的,所以也许它是一个非问题或未来的,当我更熟练的sqlalchemy.
van*_*van 26
您的问题很常见,答案就在SA文档的会话常见问题中:
session = Session.object_session(someobject)但是,它假定对象是持久的并且是新的(但已添加到会话中)或绑定到会话.您的示例代码包含将对象添加到会话的逻辑,因此在这种情况下我的假设可能不正确.
请参阅如何获取特定对象的会话?:
您可以使用SA运行时检查API:
from sqlalchemy import inspect
# ...
# within instance method
session = inspect(self).session
Run Code Online (Sandbox Code Playgroud)或object_session()方法:
from sqlalchemy.orm.session import Session
# ...
# within instance method
session = Session.object_session(self)
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
8923 次 |
| 最近记录: |