【发布时间】:2011-11-29 05:53:52
【问题描述】:
我的应用程序允许用户创建和删除Site 对象。我已经使用session.add() 和session.delete() 实现了这一点。然后我有调用session.commit() 和session.rollback() 的“保存”和“重置”按钮。
如果我添加一个新的Site,然后保存/提交它,然后删除它,一切正常。但是,如果我在保存对象之前尝试从会话中删除它,则会收到“未持久化”错误。
代码:
self.newSite = Site('foo')
self.session.add(self.newSite)
print self.session.new
self.session.delete(self.newSite)
输出:
IdentitySet([<Site('foo')>])
Traceback (most recent call last):
File "C:\Program Files\Eclipse\dropins\plugins\org.python.pydev.debug_2.2.1.2011071313\pysrc\pydevd_comm.py", line 744, in doIt
result = pydevd_vars.evaluateExpression(self.thread_id, self.frame_id, self.expression, self.doExec)
File "C:\Program Files\Eclipse\dropins\plugins\org.python.pydev.debug_2.2.1.2011071313\pysrc\pydevd_vars.py", line 375, in evaluateExpression
result = eval(compiled, updated_globals, frame.f_locals)
File "<string>", line 1, in <module>
File "C:\Python27\Lib\site-packages\sqlalchemy\orm\session.py", line 1245, in delete
mapperutil.state_str(state))
InvalidRequestError: Instance '<Site at 0x1ed5fb0>' is not persisted
我知道这里发生了什么,但我不确定我应该做什么。
还有其他方法可以从会话中删除尚未持久化的对象吗?或者我应该在尝试删除之前调用session.flush(),以防我要删除的对象尚未刷新?
如果是后者,session.query() 怎么会自动刷新(确保待处理的对象出现在查询结果中),但 session.delete() 没有(这将确保可以删除待处理的对象而不会出错)。
【问题讨论】:
标签: python sqlalchemy