python_sqlite3_commit
Pythonにはsqlite3という、SQLiteのインターフェイスモジュールがあるんだけど、Python 2.5の日本語ドキュメントのとおりやろうとすると微妙にハマる、という話。
日本語ドキュメントのsqlite3ページには、以下のようなコード例が載ってます。
c = conn.cursor() # Create table c.execute('''create table stocks (date text, trans text, symbol text, qty real, price real)''') # Insert a row of data c.execute("""insert into stocks values ('2006-01-05','BUY','RHAT',100,35.14)""")
ところが、これだと実際にはinsertがデータベースに反映されない。実はinsertなどの操作を行った最後に、sqlite3.Connectionオブジェクトのcommit()メソッドを行わないとコミットが行われず、変更が実行されない模様。
で、実はPython 2.5.2ドキュメントのsqlite3ページには、このあとに以下のようなコードが追加されております。
# Save (commit) the changes conn.commit() # We can also close the cursor if we are done with it c.close()
にも関わらず、「Connection Object」のページにはcommit()に関する記述がないのでさらに混乱は深まる……。ちなみに、Python 2.6.4のドキュメントではちゃんとcommit()メソッドについて記述されており、commit()を実行しないとデータベースへの変更が行われないよ、またrollback()メソッドを実行すれば前回のcommit()までの内容を取り消せるよ、との旨が書かれてます。
教訓:日本語ドキュメントを当てにせず、ちゃんと原文を読め。