gpt4 book ai didi

python - Python 如何查看另一个客户端对 MariaDB 所做的更改?

转载 作者:行者123 更新时间:2023-11-29 17:19:02 25 4
gpt4 key购买 nike

在我的 Windows 计算机上,我在 MariaDB (10.3.7) 上有一个非常简单的数据库,我使用 mysql-connector-python-rf (2.2.2) 连接到该数据库。

我还使用 2 个 HeidiSQL 工作台实例连接到数据库。

当我使用其中一个工作台在数据表中添加或删除一行时,我可以立即使用另一个工作台中的 SELECT 语句访问更改的数据。我的结论:第一个工作台已经将更改提交到数据库。

然而,看到 Python 中的变化似乎更加复杂。我必须在查询之前添加 commit() 才能看到更改:

config = {'user'    : 'some_user',
'password': 'some_password',
'host' : '127.0.0.1',
'database': 'some_database',
'raise_on_warnings': True,
}
db = mysql.connector.connect(**config)

# wait some to make changes to the database using the HeidiSQL workbenches

db.commit() # even though Python has not changed anything which needs to be
# committed, this seems necessary to re-read the db to catch
# the changes that were committed by the other clients
cursor = db.cursor()
cursor.execute('some_SQL_query')
for result in cursor:
do_something_with(result)
cursor.close()

到目前为止,我认为 commit() 用于提交 Python 想要对数据库进行的更改。

commit() 还会将自上次 connect() 以来由其他客户端完成的更改读取到 Python 中,这样说是否正确?这是错误/不便还是功能?

或者这里还发生了我错过的其他事情?

最佳答案

线程写入在写入后发出COMMIT。在读取线程中执行 COMMIT 没有任何效果。

我不会更改“隔离级别”,除非您需要读者在发生更改时看到未完成的更改。 这通常不需要。

因此,编写者应该在完成某些工作单元后立即发出COMMIT。这可能是一个INSERT;这可能是一个漫长、复杂的操作组合。一个简单的例子是经典的“资金转移”:

BEGIN;
UPDATE accounts SET balance = balance + 100 WHERE id = 123; -- my account
UPDATE accounts SET balance = balance - 100 WHERE id = 432; -- your account
COMMIT;

为了帐户的完整性,您希望两个UPDATE要么发生,要么不发生,即使系统在中间崩溃。并且您不希望任何其他线程在读取中间的数据时看到balance不一致。

另一种表达方式:作者负责说“我完成了”(通过调用commit)。

关于python - Python 如何查看另一个客户端对 MariaDB 所做的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51360140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com