Python mysql不提供

2024-06-28 18:55:26 发布

您现在位置:Python中文网/ 问答频道 /正文

在使用过其他编程/脚本语言之后,我完全被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()对提交更改没有任何作用。 数据库(尽可能相关):

^{pr2}$

我可以使用TCL/Tk使用相同的凭据提交更改,因此这不应该是权限问题。在

我做错什么了?在


Tags: 代码truebinusr编程mysqlconnection脚本语言
1条回答
网友
1楼 · 发布于 2024-06-28 18:55:26

在服务器重新启动后(与此无关),我现在无法重现我的问题。一切如期进行。我很想知道出了什么问题,但这似乎更像是服务器/配置问题,而不是编程问题。在

为了那些无意中发现这个问题的人寻求智慧 (啊哼)对我所学知识的一个小小的解释。在

与我经常使用的其他语言(Perl、TCL)相反,Python在默认情况下关闭了autocommit。此外,mysql CLI以autocommit启动。但是Python的PEP0249指出:

Note that if the database supports an auto-commit feature, this must be initially off. An interface method may be provided to turn it back on

一。在

问题是,如果禁用了自动提交的会话结束时没有 显式地提交最后一个事务,MySQL回滚该事务。在

所以,你有三个选择:

  • 打开自动提交
  • 明确提交更改
  • 丢失数据:-)

连接到数据库时可以直接打开自动提交:

import mysql.connector as mariadb
connection = mariadb.connect(user='testdb', password='testdb',
    database='testdb', host='127.0.0.1',autocommit=True)

或单独:

^{pr2}$

显式提交更改是通过

connection.commit()

注意,提交是通过连接到数据库而不是通过游标完成的。在

另外,我认为这可能是个锁定问题,但是 脚本:

import mysql.connector as mariadb
number=input('->')
mariadb_connection = mariadb.connect(user='testdb', password='testdb',database='testdb', host='127.0.0.1')
cursor = mariadb_connection.cursor(buffered=True)
cursor.execute( "UPDATE testdb SET descr='konijntje' WHERE number=%s",(number,))
print 'rowcount',cursor.rowcount
number=input('->')
mariadb_connection.commit()
mariadb_connection.close()

我可以验证同一记录上的第二次启动要等到第一次释放锁。在

所以感谢您的时间,耐心和保证,我的代码并没有像我想象的那样错误。在

相关问题 更多 >