SQLAlchemy 关系加载器在表上留下锁?

2024-01-02

我有非常简单的代码导致我的 MySQL 数据库挂起:

import sqlalchemy as sa
from sqlalchemy import orm

# creating the engine, the base, etc
import utils
import config

utils.base_init(config)
Base = config.Base

class Parent(Base):
    __tablename__ = 'Parents'
    id = sa.Column(sa.Integer, primary_key=True)
    children = orm.relationship('Child', backref='parent')

class Child(Base):
    id = sa.Column(sa.Integer, primary_key=True)
    parent_id = sa.Column(sa.Integer)

    __tablename__ = 'Children'

    __table_args__ = (sa.ForeignKeyConstraint(
        ['parent_id'],
        ['Parents.id'],
        onupdate='CASCADE', ondelete='CASCADE'),{})

Base.metadata.create_all()

session = orm.sessionmaker(bind=config.Base.metadata.bind)()
p = Parent(id=1)
c1 = Child(id=1)
c2 = Child(id=2)
session.add(p)
session.add(c1)
session.add(c2)
session.commit()

# Works
# Base.metadata.drop_all()

c1.parent
# 2012-08-17 20:16:21,459 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
# 2012-08-17 20:16:21,460 INFO sqlalchemy.engine.base.Engine SELECT `Children`.id AS `Children_id`, `Children`.parent_id AS `Children_parent_id` 
# FROM `Children` 
# WHERE `Children`.id = %s
# 2012-08-17 20:16:21,460 INFO sqlalchemy.engine.base.Engine (1,)



Base.metadata.drop_all()
# hangs until i kill the connection above.
# server status: 'Waiting for table metadata lock'

看起来 SQL Alchemy 在发出加载关系属性所需的选择查询后没有释放元数据锁?我怎样才能让它释放它?我什至不明白为什么 select 语句首先需要锁定表!

当然,我可以通过关闭会话来使这段特定的代码正常工作,但这在我的实际程序中并不实用。


您需要在之前开始新的交易.drop_all()称呼; MySQL 看到您在此事务中读取表,并锁定表以防止被删除:

session.commit()
Base.metadata.drop_all()

隐式提交事务会开始一个新事务。

MySQL 对事务隔离做出保证;您的事务将读取一致的数据,并且在您启动新事务之前不会看到其他事务提交的更改。 ADROP TABLE然而,该语句使得 MySQL 无法保持这些保证,因此表被锁定。

或者,您可以更改事务隔离级别,告诉 MySQL 您不关心隔离保证。由于会话连接是池化的,因此只能对所有连接执行此操作,或者根本不执行此操作;使用isolation_level论证create_engine() http://docs.sqlalchemy.org/en/rel_0_7/dialects/mysql.html#transaction-isolation-level:

engine = create_engine(
    'mysql://username:passwd@localhost/databasename',
    isolation_level='READ UNCOMMITTED')

See the SET TRANSACTION文档 https://dev.mysql.com/doc/refman/5.0/en/set-transaction.html有关每个隔离级别的详细信息。

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

SQLAlchemy 关系加载器在表上留下锁? 的相关文章

随机推荐

  • iconv() 与. utf8_encode()

    当您有一个与 UTF 8 不同的字符集并且需要将其转换为 JSON 格式以将其迁移到数据库时 可以在 PHP 中使用两种方法 调用 utf8 encode 和 iconv 我想知道哪一种性能更好 什么时候方便使用其中一种 当您的字符集与 U
  • 添加内部超链接到 pdf

    我有一个 PDF 文档 我想向其中添加内部超链接 具体来说 第 1 页包含一个我想要使其可点击的目录 我的想法是在第 1 页的预定位置创建矩形框 该矩形框应链接到第 2 3 我发现这篇文章讨论了使用上面描述的方法添加内部超链接 http b
  • 无法在文件中查找字符串并使用 Inno Setup 填充它?

    I have demo properties文件 我可以加载文件并迭代以获取其中存在的所有值 hibernate connection username jack hibernate connection password queen hi
  • 减小 Excel 文件大小 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在一家excel questions tagged excel应用程序 并为用户提供一个菜单以在该 Excel 应用程序 Excel 工
  • Asp.Net 拒绝用户访问某些页面

    如何允许用户访问我的 Web 应用程序 但拒绝他们访问特定页面 我希望允许更多用户使用我构建的应用程序 但有几个页面我不希望他们能够访问 这是我现在在 Web config 中的内容
  • Angular 6:onChange mat-slide-toggle 条件验证从对象数组中仅选择一个选项

    我有一份清单mat slide toggle 一次只有一个滑块将保持启用状态 而其他滑块将保持禁用状态 现在 当单击该启用的滑块时 其值将被更改 同时其他滑块列表将被启用以供选择 一旦选择一个滑块 其他滑块将被禁用 所以 简而言之 整个数组
  • 为什么字节码编程不如汇编编程那么流行或盛行?

    您可以在互联网上看到汇编代码和汇编编码器 但几乎没有字节码 这是为什么 汇编编程的需求和优点也适用于字节码编程 字节码编程远不如汇编编程流行 常见的另一个原因是字节码的通用性 它的简单性 字节码指令集主要是 ultra RISC 非常简单的
  • 为什么在 Dao 设计模式或其他设计模式中使用接口

    请参阅以下 Dao 设计模式的组成部分 数据访问对象模式或 DAO 模式用于将低级数据访问 API 或操作与高级业务服务分开 以下是数据访问对象模式的参与者 数据访问对象接口 该接口定义要在模型对象上执行的标准操作 数据访问对象具体类 该类
  • TypeScript 编译中的实验装饰器警告

    我收到警告 对装饰器的实验性支持是一项在未来版本中可能会发生变化的功能 设置 experimentalDecorators 选项 以删除此警告 即使我的 tsconfig json 中的compilerOptions具有以下设置 emitD
  • 提交时如何将 Git 提交 ID 填充到文件中?

    我想创建 Git 钩子 它将填充我将要在源代码中创建的文件 基本上是变量替换 的提交的提交 ID 这可以用 Git 实现吗 或者事实上 通过将变量解析为 git id 我将更改 sha 1 从而导致 先有鸡还是先有蛋 的问题 我针对类似情况
  • Cucumber @Before 钩子运行两次 @After 一次

    给所有人 目前正在写一个BDD测试自动化框架 使用Java11 Junit5 Cucumber Selenium 构建工具 Gradle 创建了一个用于验证 Google 标题的小测试 开始测试时 使用Test task在 Gradle 或
  • 如何在 jQuery 中获取图像的当前位置?

    我一直在开发一个具有背景的图像处理脚本 用户可以将一个或多个图像上传到该背景上 我希望用户能够在背景周围拖动和移动 最后他们可以生成最终图像 但是 我不知道如何获取 BG 上可拖动图像位置的位置 我一直在互联网和电子书上搜索 但没有任何线索
  • htaccess 带有 PHP 和 URL 变量的漂亮 URL

    希望有人可以在这里提供一些帮助 这是一个涉及多个层面的问题 简而言之 我想要拥有漂亮的 URL 这些 URL 使用文件夹中文件的 URL 变量 所以 我想要http www example com page path to page htt
  • 未定义的方法“save”使测试在测试结束之前失败

    我正在关注 ruby railstutorial org 我遇到了一些麻烦 但我解决了它们 然而 现在我在谷歌上搜索了相当长的一段时间 检查了代码 我什至知道为什么测试失败 但不知道如何让它通过 所以 问题来了 我有一个用户模型 class
  • 无法将密钥发送到定向 Paypal 登录页面

    我正在为 Paypal Checkout 编写一个自动填充机器人 paypal 登录页面是从另一个网站重定向的 因此与官方 paypal 登录页面略有不同 尽管 HTML 类似 我尝试过不同的方法 比如switch to frame scr
  • 运行 Spring MVC 测试时出现 NoSuchMethod 错误

    我正在尝试按照 Spring in Action 第四版 第 5 章中的示例来创建我自己的项目 仍然是企业级的新手 我正在使用 Windows 7 PC Java 7 Spring 4 和 Maven 当我运行 ClinicalNoteCo
  • Hbase快速统计行数

    现在我实现了行计数ResultScanner像这样 for Result rs scanner next rs null rs scanner next number 如果数据达到百万次计算量很大 我想实时计算我不想使用Mapreduce
  • Spring框架4.3.0 - 我什么时候需要@Autowired?

    我刚刚开始学习 Spring 框架 我使用版本 4 3 0 我认为我们需要 Autowired 来告诉框架何时一个类需要注入 不过 我今天尝试这样做 Component public class CDPlayer implements Me
  • 如何在 C++ 中创建动态数组的数组

    我正在尝试学习 C 并尝试为简单的哈希表编写代码 如下结构 array 0 0 array 0 1 array 0 2 key 1 value 1 value 2 array 1 0 array 1 1 key 2 value 3 arra
  • SQLAlchemy 关系加载器在表上留下锁?

    我有非常简单的代码导致我的 MySQL 数据库挂起 import sqlalchemy as sa from sqlalchemy import orm creating the engine the base etc import uti