表 xxx' 上的 UPDATE 语句预计更新 1 行; 0 与 Zope transactionmanager 匹配

2023-11-27

我正在运行 Pyramid + Zope 事务管理器 + SQLAlchemy + PostgreSQL。在某些场合,我见过StaleDataErrorPyramid 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 个请求,首先选择一个对象并尝试在数据存储中更新/删除它,最终会出现“竞争条件”。

假设您想做一些事情,比如获取一个对象然后更新它。

如果事务需要一些时间并且您没有选择“用于更新”的对象,从而锁定行 - 如果对象在第一个请求中被删除,并且第二个事务尝试对数据库中不再存在的行发出更新,您可以结束与此例外。

您可以尝试执行一些行锁定来防止这种情况发生 - 后续事务将“等待”第一个操作完成。在它被执行之前。

http://docs.sqlalchemy.org/en/rel_1_0/orm/query.html?highlight=for_update#sqlalchemy.orm.query.Query.with_for_update

and

http://docs.sqlalchemy.org/en/rel_1_0/orm/query.html?highlight=with_lockmode#sqlalchemy.orm.query.Query.with_lockmode

描述一些可用于解决此问题的 sqlalchemy 机制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

表 xxx' 上的 UPDATE 语句预计更新 1 行; 0 与 Zope transactionmanager 匹配 的相关文章

随机推荐

  • 如何更改 Delphi TGrid Firemonkey 组件中单元格的颜色?

    我使用 TGrid 列中的单元格示例作为示例 组件选项中没有颜色属性 颜色只能通过代码访问 该代码必须放在 绘制列单元格 事件中 但是什么代码是做什么的呢 我尝试使用与 VCL 组件中相同的过程 但 FMX 中的 Tcanvas 不包含画笔
  • 运行 git archive 时忽略 .gitignore

    我有一个包含一堆源代码的 git 存储库 当编译时会生成一堆二进制文件 这些二进制文件都列在相应的 gitignore 文件中 但不包含在存储库中 但是 我想分发我的存储库的源 二进制文件快照 zip 文件 其中包含所有二进制文件 但不包含
  • OpenAI ChatGPT (GPT-3.5) API 错误 429:“您超出了当前配额,请检查您的计划和账单详细信息”[已关闭]

    Closed 这个问题是与编程或软件开发无关 目前不接受答案 我正在制作一个 Python 脚本以通过其 API 使用 OpenAI 但是 我收到此错误 openai error RateLimitError 您超出了当前配额 请检查您的计
  • 为什么默认情况下不启用“downlevelIteration”?

    当针对 ES5 使用扩展运算符时 转换一个Iterator to an Array 它显示使用错误 downlevelIteration编译器选项 一旦启动 点差运算符似乎就可以完美地工作 我想知道为什么需要指定这一点 除了从 tslib
  • 将 PreferenceFragment 添加到 FragmentPagerAdapter

    我正在尝试添加一个PreferenceFragment to a FragmentPagerAdapter 我的班级延长了FragmentActivity 我努力了FragmentTransaction 如下所示以及尝试添加到容器中 但似乎
  • Discord 机器人阅读反应

    我需要实现一些功能 其中之一是实现民意调查类型功能 由于某些政策 无法使用公共不和谐机器人 因此我们必须自己实施一些措施 昨天做了一些研究 能够使用以下命令制作基本的机器人python3 and commandsapi来自discord e
  • ARM NEON:比较 128 位值

    我感兴趣的是找到比较 Cortex A9 内核 允许使用 VFP 指令 上 NEON 寄存器 例如 Q0 和 Q3 中存储的值的最快方法 最低周期数 到目前为止我有以下内容 1 使用VFP浮点比较 vcmp f64 d0 d6 vmrs A
  • 在Java中,如何删除float中的所有0?

    我想这样改变浮动 10 5000 gt 10 5 10 0000 gt 10 如何删除小数点后的所有零 并将其更改为浮点数 如果有非零 或整数 如果只有零 提前致谢 为什么不尝试正则表达式呢 new Float 10 25000f toSt
  • 制作多语言android应用程序

    我创建了多语言 英语 俄语 乌兹别克语 应用程序 我将 4 个字符串资源放入 4 个文件夹 values values en values ru values uz 中docs 当我更改应用程序语言时 会更新应用程序控制器中的资源配置 如下
  • 在现有文档的特定位置插入 XML 节点

    我有一个包含一些可选节点的现有 XML 文档 我想插入一个新节点 但在某个位置 该文档看起来像这样
  • 自动映射器和不变性

    是否可以将 AutoMapper 与不可变类型一起使用 例如 我的域类型是不可变的 我想将我的视图类型映射到此 我相信不是 但只是想确认这一点 此外 由于最佳实践是让域类型不可变 因此将视图类型映射到域类型时的最佳实践是什么 我通常会手动进
  • Webpack:大小超出建议限制 (244 KiB)

    这是有问题的分支和存储库 https github com Futuratum moon holdings tree dev 您好 我遇到了这个问题 因为我有一个包含大量图像的资产文件夹 我不在乎大小 这对于现代网络用户来说应该是正常的 我
  • PHP 命令行界面出现奇怪的 5 秒停顿(与 mysql/mysqli 扩展有关)

    从命令行 PHP 客户端 Windows 上的 PHP 5 2 执行 PHP 脚本时 我遇到了奇怪的 5 到 7 秒的暂停 在此暂停期间 PHP 脚本似乎 冻结 了一段时间 然后返回到命令提示符 它没有使用任何重要的 CPU 时间 就好像它
  • 使用 java 向 WebService 发出 SOAP 请求

    我对如何通过 java 向 Web 服务发出请求有点困惑 目前我唯一了解的是 Web 服务使用 xml 结构化消息 但我仍然不太明白如何构建我的请求
  • Java 的类型擦除有什么好处?

    我读了一篇tweet今天说 当 Java 用户抱怨类型擦除时 这是很有趣的 这是 Java 唯一正确的事情 而忽略了它出错的所有事情 因此我的问题是 Java 的类型擦除有好处吗 除了向后兼容性和运行时性能方面的 JVM 实现偏好之外 它
  • 错误:ENOENT:express-handlebars 中没有此类文件或目录

    我在用express handlebars在 NodeJS 中加载动态内容 inside app js const express require express const bodyParser require body parser c
  • 嵌入式系统上运行的Java VM推荐

    我们正在尝试在我们的嵌入式平台 700 MHzMIPS 74K 128 256 MB 内存 读完这篇文章后article谷歌搜索了一下 我想出了入围名单 Sun 的 Java ME Kaffe Jbed Perc HP Chai 虚拟机 P
  • 如何在不刷新页面的情况下将新的 HTML 数据从服务器推送到浏览器

    我见过许多网站 例如 Facebook 或 Stack Overflow 它们会在生成新数据时更新某些功能 例如帖子上的新答案 假设博客中添加了一篇新帖子 并且当时有人在博客中查看它 其想法是自动将新帖子添加到博客中 而无需刷新或让用户执行
  • 同时捕获java异常FileNotFound和IOException

    FileNotFoundException 是否是 IOException 的 子异常 这是我的代码 打开给定路径处文件的输入流 method FileInputStream fs try fs new FileInputStream pa
  • 表 xxx' 上的 UPDATE 语句预计更新 1 行; 0 与 Zope transactionmanager 匹配

    我正在运行 Pyramid Zope 事务管理器 SQLAlchemy PostgreSQL 在某些场合 我见过StaleDataErrorPyramid Web 应用程序上的错误 该错误对于更新数据库中的一行来说应该是非常简单的视图 由于