2017-07-26 15 views
1

MySQL DBにデータを書き込み/読み込むPythonコードを書いた。問題は、テーブルを書き込んだ後もまだテーブルが空であることです。プログラムを終了すると、すべてのデータが失われます。私のPythonコードを一時的なデータベースに書き込む

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

:これは私がテーブルにデータを挿入する方法である

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']))) 

と これは私がテーブルを作成する方法でありますテーブルにデータを挿入してプログラムを実行した後に得られるもの:

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

NB:プログラムを実行しているときにデータを挿入した後でデータを選択できますが、テーブルが空であると言われています。だから、コードは一時テーブルに書き込むのですか?

+1

あなたは 'connection.commit()'を呼び出しますか?あなたは 'connection.close()'を呼んでデータベースを手動で閉じますか?あるいは、 'connection'オブジェクトを' with'文で作成しますか? –

+0

私はconnection.commit()を使用していませんでした。 – chiheb

答えて

1

あなたはおそらくここで使用している

connection.commit() 

のMySQLコネクタ/ Pythonのを、試してみてください、あなたは、データベースへの「プッシュ」の変更に手動でそれを行うていることを意味している自動コミットしません。

あなたはすべてexecutecommitにしたいかもしれませんが、また、あなたの帯域幅を節約するために、時にはそれを実行しようとするかもしれない(しかし、あなたは何かが間違っていたとき、あなたの変更を失うというリスク)。

1

データベース内のトランザクションは、コミットされるまで通常は効力を持ちません。 私はPythonでMySQLについて知りませんが、のConnectionインスタンスにはcommitメソッドがあり、トランザクションをデータベースに書き込むことがわかります。

を使用している場合は、Connection.close()または(withブロックを残して)接続を閉じると、現在のトランザクションを書き込む必要があります。 しかし、とにかく、開かれたオブジェクトを残すことは悪い習慣です。 「悪い習慣」によって、私は「危険でバグになりやすい」という意味です。

関連する問題