數(shù)據(jù)庫不會使用MySQL和Python自動更新我在更新MySQL數(shù)據(jù)庫中的某行時遇到了一些麻煩。這是我正在嘗試運行的代碼:import MySQLdbconn=MySQLdb.connect(host="localhost", user="root", passwd="pass", db="dbname")cursor=conn.cursor()cursor.execute("UPDATE compinfo SET Co_num=4 WHERE ID=100")cursor.execute("SELECT Co_num FROM compinfo WHERE ID=100")results = cursor.fetchall()for row in results:
print row[0]print "Number of rows updated: %d" % cursor.rowcount
cursor.close()conn.close()我運行這個程序時得到的輸出是:4 更新的行數(shù):1它似乎正在工作,但如果我從MySQL命令行界面(CLI)查詢數(shù)據(jù)庫,我發(fā)現(xiàn)它根本沒有更新。但是,如果從CLI我輸入UPDATE compinfo SET Co_num=4 WHERE ID=100;數(shù)據(jù)庫按預(yù)期更新。我的問題是什么?我正在Windows機器上運行帶有MySQL 5.1.30的Python 2.5.2。
3 回答

慕神8447489
TA貢獻1780條經(jīng)驗 獲得超1個贊
我不確定,但我猜你正在使用INNODB表,而你還沒有完成提交。我相信MySQLdb會自動啟用事務(wù)。
打電話conn.commit()
前打電話close
。
從FAQ: 從1.2.0開始,MySQLdb默認禁用自動提交

繁星淼淼
TA貢獻1775條經(jīng)驗 獲得超11個贊
MySQLdb默認情況下自動關(guān)閉,這可能會讓人感到困惑。您的連接存在于其自己的事務(wù)中,在提交該事務(wù)之前,您將無法看到從其他連接所做的更改。
您可以conn.commit()
像其他人指出的那樣在更新語句之后執(zhí)行,或者conn.autocommit(True)
在創(chuàng)建連接對象后立即通過設(shè)置完全禁用此功能。

慕的地6264312
TA貢獻1817條經(jīng)驗 獲得超6個贊
您需要手動提交更改或打開自動提交。
SELECT返回已修改(但未保留)數(shù)據(jù)的原因是因為連接仍在同一事務(wù)中。
添加回答
舉報
0/150
提交
取消