【问题标题】:Change isolation level in records query or close transaction更改记录查询或关闭事务中的隔离级别
【发布时间】:2017-03-07 11:48:16
【问题描述】:

我正在尝试使用Kenneth Reitz's records library 构建一些自动测试脚本。我需要在这里和那里检查 MySQL 数据库的更新。

db_url_mysql = 'mysql://user:pass@mysql.localhost:3306/DB'
db = records.Database(db_url_mysql)
rows = db.query("SELECT * FROM Users").all()

但是,我遇到过有时简单查询会返回空数据集,而忽略表中的更新。我完全可以在 GUI 客户端中看到更新,甚至可以在替代 python 控制台中使用记录。 我发现记录使用具有默认隔离级别“REPEATABLE READ”的 SQLAlchemy。可重复读取会忽略所有更新,直到事务结束,所以我看不到它们。

有什么办法可以改变吗?我可能需要关闭一个事务并打开一个新事务,或者可能需要更改此连接的隔离级别,但我该怎么做呢?

【问题讨论】:

  • 我仍然找不到在不删除记录库并转移到 SQLAlchemy 的情况下更改此设置的方法。但是,我找到了一种解决方法。如果您调用 db.query('SET AUTOCOMMIT=1') ,下一个查询将在调用后立即提交,有效地允许您在不缓存的情况下检查您的数据库。

标签: python mysql sqlalchemy mysql-python python-records


【解决方案1】:

现在我可以回答我的问题了。

随着记录 0.5.0(2016 年 11 月)的发布,现在可以将参数传递给 SQLAlchemy 驱动程序。在我使用的 0.4.3 中没有这种可能性。

所以,要在连接上设置隔离级别,我们应该使用

db_url_mysql = 'mysql://user:pass@mysql.localhost:3306/DB'
db = records.Database(db_url_mysql,isolation_level="READ_UNCOMMITTED")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 2015-03-26
    • 2015-03-15
    • 2013-10-16
    • 2011-09-30
    相关资源
    最近更新 更多