2017-07-26 112 views
1

我寫了一個python代碼,用於在MySQL DB中寫入/讀取數據。問題在於,即使在我寫入之後,表格仍然是空的。當我關閉程序時,我會丟失所有數據。 這是我創建的表:我的python代碼寫在一個臨時數據庫中

cursor.execute("CREATE TABLE IF NOT EXISTS employees (id INT UNSIGNED NOT NULL AUTO_INCREMENT,Name VARCHAR(20) NOT NULL,LastName VARCHAR(20) NOT NULL,Post VARCHAR(20) NOT NULL,RasID SMALLINT UNSIGNED NOT NULL,PRIMARY KEY (id)) ENGINE=INNODB;") 

這就是我的表中插入數據:

cursor.execute("INSERT INTO employees VALUES (NULL, %s, %s, %s, %s);",(UserName, UserLastName, UserPost, int(data['RasID']))) 

,這我怎麼選擇從表中的數據:

cursor.execute("SELECT * FROM employees WHERE Name= %s;",(Jmsg['face'],)) 

這是我在表中插入數據和程序仍然運行後得到的:

mysql> select * from employees; 
Empty set (0.00 sec) 

注意:當程序仍在運行時,我可以在插入數據後選擇數據,但正如我提到的那樣,表格是空的。那麼,代碼是寫在臨時表中還是什麼?

+1

你叫'connection.commit()'?你是否通過調用'connection.close()'手動關閉數據庫?或者,你是否在'with'語句中創建了'connection'對象? –

+0

我沒有使用connection.commit()這就是爲什麼謝謝你 – chiheb

回答

1

嘗試

connection.commit() 

MySQL連接/ Python的,這你可能在這裏使用,不會自動提交,這意味着你必須做手工,「推」更改數據庫。

您可能需要在每個execute之後commit,但您有時也可能會嘗試運行以節省帶寬(但如果出現問題,則可能會失去更改)。

1

數據庫中的事務在提交之前通常不起作用。 我不知道Python中的MySQL,但我知道sqlite3Connection實例有一個commit方法,它會將事務寫入數據庫。

此外,在與sqlite3一起工作時,通過撥打Connection.close()或(通過留下with塊,我認爲)關閉連接應寫入當前事務。 但是無論如何,留下一個打開的對象是不好的做法。 而「不好的做法」,我的意思是「危險且容易出錯」。

相關問題