2015-05-04 65 views
2

我使用python mysql.connector進行某些數據庫操作。我的數據庫表結構是這樣的:使用Python成功插入後MySQL數據丟失mysql.connector

enter image description here

我運行與Faker Package(fake-factory 0.5.0)一個python script來填充這個數據庫表。插入後,我運行查詢來驗證數據是否正確存儲到表中。 python腳本顯示所有插入的數據並完成exit code 0

但是,當我通過phpMyadmin探索該表時,它不顯示那些插入的行。這些插入的數據在下次運行後不會保留。

這裏是我的代碼:

import mysql.connector 
from faker import Faker 

fake = Faker() 

cnx = mysql.connector.connect(user='root', password='001', 
           host='127.0.0.1', 
           database='smf') 
cursor = cnx.cursor() 

for i in range(1, 5): 
    query = "insert into user " + "(userid, name) values("+ str(i) + ", '" + fake.name() + "')" 
    cursor.execute(query) 

query = "select * from user" 
cursor.execute(query) 

for (x) in cursor: 
    print ("name = " + format(x)) 

cnx.close() 
+1

你需要有一個cnx.commit()後,cursor.execute(查詢)命令 – LampPost

+1

得到它。需要'cnx.commit()' –

+1

當返回的名稱值包含單引號時,這會導致INSERT查詢中的錯誤。 (包含在SQL文本中的潛在不安全值必須被轉義,更好的方法是使用帶有綁定佔位符的預處理語句。) – spencer7593

回答

2

默認情況下Connector/Pythonautocommit關閉,和MySQL 5.5和更高版本使用的事務InnoDB表,所以有必要commit您使用連接的commit()方法的變化。您也可以使用rollback()方法回滾。

因此,在cursor.execute(query)之後放cnx.commit()命令可以解決您的問題。

2

你應該調用第一cursor.execute(query)後有cnx.commitcommit()函數允許數據永久保存。