2010-08-09 73 views
0

我有一個連接到本地MySQL數據庫的python腳本。我知道這是正確的連接,因爲我能做到這一點,並得到正確的結果:在Python MySQL中執行INSERT查詢的正確方法是什麼?

cursor.execute(「SELECT * FROM卷軸」)

但是當我嘗試做任何插入語句只是什麼都不做。沒有錯誤信息,沒有例外。當我從sqlyog檢查它時,數據庫中沒有顯示出來。這是我的代碼如下所示:

self.cursor.executemany( 「INSERT INTO卷軸(ETIME,ETEXT)VALUES(%S,S)」,tups)

其中tups是一個元組列表看起來像這樣('0000-00-00 00:00:00','文字')。沒有錯誤出現,如果我複製粘貼生成的SQL查詢到sqlyog它的作品。我試着生成查詢並對其執行cursor.execute(),沒有錯誤,也沒有結果。任何人都知道我在做什麼錯了?

回答

7

你需要做一個後self.cursor.commit()self.cursor.executemany("INSERT INTO reel (etime,etext) VALUES (%s,%s)", tups)

與1.2.0開始,MySQLdb的默認禁用自動提交,所要求的DB-API標準(PEP-249)。如果您正在使用InnoDB表或其他類型的事務表類型,則需要在關閉連接之前執行connection.commit(),否則您的更改都不會寫入數據庫。相反,您也可以使用connection.rollback()來拋棄自上次提交以來所做的任何更改。

重要說明:某些SQL語句(特別是DDL語句,如CREATE TABLE)是非事務性的,因此它們無法回退,並導致未決事務提交。

Is a FAQ

+0

應connection.commit(),但正確的想法 – ig0774 2010-08-09 17:02:24

+0

感謝...就是這樣。我讀了像Python的4個不同的指南MySQL,我從來沒有注意到說要做的部分大聲笑。 – Barakat 2010-08-09 17:08:37

+0

是的,我遇到了MySQL 5.1.3及更早版本的問題,我不需要添加commit語句,但是在MySQL 5.1.42及更高版本中,我必須在''conn.commit()'之後添加'conn.commit()執行'語句。 – 2010-08-09 17:13:10

相關問題