同时MySQLdb连接没有看到更新

时间:2014-03-03 13:14:59

标签: python mysql mysql-python

我正在创建一些不同的脚本,这些脚本都与中央MySQL数据库交互以共享数据,但我发现我对数据库所做的一些更改不会传播通过或者对某些脚本可读,直到数据库连接已经存在关闭并重新开启。

例如,使用以下代码read_script将仅在我退出并重新启动write_script后使用write_script打印已添加到数据库的项目。我是MySQL的新手,所以我不确定我的SQL或我的python中是否存在问题

read_script

connection = MySQLdb.connect(...)
while True:
    cur = connection.cursor()
    cur.execute("SELECT * FROM my_table")
    print cur.fetchall()
    cur.close()

write_script

connection = MySQLdb.connect(...)
cur = connection.cursor()
cur.execute("INSERT INTO my_table VALUES(some_data)")
cur.close()
connection.commit()

我需要做些什么才能确保从数据库中获取数据?

2 个答案:

答案 0 :(得分:3)

默认事务隔离是REPEATABLE READ。这意味着您的read_script将始终读取并显示相同的数据。把提交放在你的while循环中。附注:使用time.sleep(1)可能很适合阅读。

答案 1 :(得分:1)

是的,看起来假设您只是执行单个事务然后断开连接。如果您有不同的需求,那么您需要解决这个假设。您可以进行提交(但如果您实际上没有更改数据,我会使用回滚)。或者您可以更改@geertjanvdk提到的光标上的隔离级别 - 来自this discussion我用过这个:

dbcursor.execute("SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED")

或者,看起来您可以在连接上将auto commit设置为true:

dbconn.autocommit(True)

但是,如果实际在连接中进行了更改,则不建议这样做。