在使用过其他编程/脚本语言之后,我完全被Python的mysql接口所迷惑(我对Python有点陌生),我无法提交我的更改。我把代码删减到最低限度:
#!/usr/bin/python
import mysql.connector as mariadb
mariadb_connection = mariadb.connect(
user='testdb',
password='testdb',
database='testdb',
host='127.0.0.1',
autocommit=True
)
mariadb_connection.autocommit=True
cursor = mariadb_connection.cursor(buffered=True)
cursor.execute( "UPDATE testdb SET descr='konijn' WHERE number=14549")
mariadb_connection.commit()
mariadb_connection.close()
我本以为自动提交可以做到这一点,但它没有做到。而且,mariadb_connection.commit()
对提交更改没有任何作用。
数据库(尽可能相关):
我可以使用TCL/Tk使用相同的凭据提交更改,因此这不应该是权限问题。在
我做错什么了?在
在服务器重新启动后(与此无关),我现在无法重现我的问题。一切如期进行。我很想知道出了什么问题,但这似乎更像是服务器/配置问题,而不是编程问题。在
为了那些无意中发现这个问题的人寻求智慧 (啊哼)对我所学知识的一个小小的解释。在
与我经常使用的其他语言(Perl、TCL)相反,Python在默认情况下关闭了autocommit。此外,mysql CLI以autocommit启动。但是Python的PEP0249指出:
一。在
问题是,如果禁用了自动提交的会话结束时没有 显式地提交最后一个事务,MySQL回滚该事务。在
所以,你有三个选择:
连接到数据库时可以直接打开自动提交:
或单独:
^{pr2}$显式提交更改是通过
注意,提交是通过连接到数据库而不是通过游标完成的。在
另外,我认为这可能是个锁定问题,但是 脚本:
我可以验证同一记录上的第二次启动要等到第一次释放锁。在
所以感谢您的时间,耐心和保证,我的代码并没有像我想象的那样错误。在
相关问题 更多 >
编程相关推荐