操作说明 UPDATE 桌子 xxx ' 预期更新 1 线时间/学期/; 0 C.被比较了 Zope transactionmanager
我是统治 Pyramid + Zope transaction manager + SQLAlchemy + PostgreSQL. 在某些情况下,我看到了一个错误
在Web应用程序中,金字塔,应该是数据库中一行更新的非常简单的表示。 由于错误发生在表示的正常限制之外,并且未重复,因此很难调试。
我认为它可以对具有数据库或事实循环的扰乱化合物具有某种态度。 但是,我不知道如何开始调试系统,所以我问什么可以导致它,另外,如何识别此类错误。
StaleDataError
在Web应用程序中,金字塔,应该是数据库中一行更新的非常简单的表示。 由于错误发生在表示的正常限制之外,并且未重复,因此很难调试。
我认为它可以对具有数据库或事实循环的扰乱化合物具有某种态度。 但是,我不知道如何开始调试系统,所以我问什么可以导致它,另外,如何识别此类错误。
UPDATE statement on table 'xxx' expected to update 1 row/s/; 0 were matched.
Stacktrace /most recent call last/:
File "pyramid/tweens.py", line 20, in excview_tween
response = handler/request/
File "pyramid_tm/__init__.py", line 94, in tm_tween
reraise/*exc_info/
File "pyramid_tm/compat.py", line 15, in reraise
raise value
File "pyramid_tm/__init__.py", line 82, in tm_tween
manager.commit//
File "transaction/_manager.py", line 111, in commit
return self.get//.commit//
File "transaction/_transaction.py", line 280, in commit
reraise/t, v, tb/
File "transaction/_compat.py", line 55, in reraise
raise value
File "transaction/_transaction.py", line 271, in commit
self._commitResources//
File "transaction/_transaction.py", line 417, in _commitResources
reraise/t, v, tb/
File "transaction/_compat.py", line 55, in reraise
raise value
File "transaction/_transaction.py", line 389, in _commitResources
rm.tpc_begin/self/
File "/srv/pyramid/trees/venv/lib/python3.4/site-packages/zope/sqlalchemy/datamanager.py", line 90, in tpc_begin
self.session.flush//
File "sqlalchemy/orm/session.py", line 2004, in flush
self._flush/objects/
File "sqlalchemy/orm/session.py", line 2122, in _flush
transaction.rollback/_capture_exception=True/
File "sqlalchemy/util/langhelpers.py", line 60, in __exit__
compat.reraise/exc_type, exc_value, exc_tb/
File "sqlalchemy/util/compat.py", line 182, in reraise
raise value
File "sqlalchemy/orm/session.py", line 2086, in _flush
flush_context.execute//
File "sqlalchemy/orm/unitofwork.py", line 373, in execute
rec.execute/self/
File "sqlalchemy/orm/unitofwork.py", line 532, in execute
uow
File "sqlalchemy/orm/persistence.py", line 170, in save_obj
mapper, table, update/
File "sqlalchemy/orm/persistence.py", line 692, in _emit_update_statements
/table.description, len/records/, rows//
没有找到相关结果
已邀请:
2 个回复
奔跑吧少年
赞同来自:
你有 2 首先选择对象并尝试更新的请求/将其删除到数据仓库,最后您获得了 "race condition".
假设您想做一些像删除对象的东西,然后更新它。
如果事务需要一些时间,并且您不会选择一个对象 "for update", 从而阻止琴弦 - 如果在第一个请求中删除对象,并且第二个事务试图为字符串提供更新,则在数据库中不再,您可以获得此异常。
您可以尝试使某些行阻止以防止它。 - 后续交易将是 "wait" 完成第一个操作。 在执行之前。
http://docs.sqlalchemy.org/en/ ... pdate
和
http://docs.sqlalchemy.org/en/ ... kmode
描述一些机制 sqlalchemy, 您可以用来解决这个问题。
龙天
赞同来自:
TL, DR: 如果你有 "first//" 在某些情况下,您需要将其删除 alchemy, 如果更新多个记录
此命令希望更新仅影响一个字符串。 因此,如果表中只有一个字段= value,则应应该是。 如果字段是你的,这尤其如此 ID.
但是 - 如果你的 ID 没有被定义为独特的 SQL, 您可能有几个与相同的条目 ID.
在这种情况下,您的可以更新所有删除 " first//"
BTW, 使用以下内容调试您的 SQL 要求 /这一次没有帮助....../