Python mySQL更新,工作但不更新表

use*_*306 33 python mysql sql-update mysql-connector-python

我有一个需要更新mysql数据库的python脚本,到目前为止:

dbb = MySQLdb.connect(host="localhost", 
       user="user", 
       passwd="pass", 
       db="database") 
try:
   curb = dbb.cursor()
   curb.execute ("UPDATE RadioGroups SET CurrentState=1 WHERE RadioID=11")
   print "Row(s) were updated :" +  str(curb.rowcount)
   curb.close()
except MySQLdb.Error, e:
   print "query failed<br/>"
   print e  
Run Code Online (Sandbox Code Playgroud)

该脚本Row(s) were updated :使用正确的行数打印,其行数为RadioID11.如果我将其更改RadioID为表中不存在的另一个数字,它将说明Row(s) were updated :0.但是,数据库实际上并未更新.该CurrentState领域保持不变.如果我将SQL语句复制并传递给PHPMyAdmin,它可以正常工作.

Laz*_*ddy 83

使用

dbb.commit()
Run Code Online (Sandbox Code Playgroud)

curb.execute ("UPDATE RadioGroups SET CurrentState=1 WHERE RadioID=11")

将您"加载"的所有更改提交到mysql服务器


Cyc*_*one 24

正如@Lazykiddy指出的那样,在将它们加载到mysql之后,你必须提交你的更改.

在MySQL连接初始化之后,您也可以使用此方法启用自动提交设置:

dbb.autocommit(True)
Run Code Online (Sandbox Code Playgroud)

然后,它将自动提交您在代码执行期间所做的更改.

  • 这引出了一个问题,这个函数是否会使得数据库提交在每个查询类型之后发生,甚至SELECT不会以任何方式改变表格? (3认同)

Lex*_*yan 9

两个答案都是正确的。但是,您也可以这样做:

dbb = MySQLdb.connect(host="localhost", 
   user="user", 
   passwd="pass", 
   db="database",
   autocommit=True) 
Run Code Online (Sandbox Code Playgroud)

添加自动提交=真