2013-03-07 72 views
30

我有一個python腳本,需要更新MySQL數據庫,我至今:Python的MySQL的更新,工作卻沒有更新表

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 

腳本打印​​用正確的行數其中有一個RadioID of 11.如果我將RadioID更改爲表中不存在的另一個數字,它會說Row(s) were updated :0。但是數據庫並沒有實際更新。 CurrentState字段保持不變。如果我複製並將SQL語句過濾到PHPMyAdmin中,它可以正常工作。

回答

72

使用

dbb.commit() 

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

提交你 '加載' 到MySQL服務器

+1

謝謝。這已經修復了它 – user2144306 2013-03-07 13:36:25

21

由於@Lazykiddy指出,所有的變化,你必須在將它們加載到mysql後提交更改。

你也可以用這種方法來啓用自動提交設置,只是MySQL連接初始化後:

dbb.autocommit(True) 

然後,它會自動提交您的代碼執行過程中所做的更改。

+2

這引發了一個問題,但是,這個函數是否會在每個查詢類型後都會發生數據庫提交,甚至不會以任何方式改變表的SELECT? – Aaron 2016-11-27 01:00:31

2

這兩個答案都是正確的。但是,你也可以這樣做:

dbb = MySQLdb.connect(host="localhost", 
    user="user", 
    passwd="pass", 
    db="database", 
    autocommit=True) 

添加自動提交=真正的

+1

非常簡單 – 2018-02-19 10:34:46