私はSQLiteデータベースと通信するために使用していますが、 SQLステートメントが実際にテーブル内の何かを正常に更新したpysqlite
かどうかを確認する正しい方法は何でしょうか。UPDATE
実行後にすぐに確認できる変数はありますpysqlite
か?
cursor.rowcount
属性を確認してください。影響を受ける行の数を示します。
UPDATE
成功しなかった場合はrowcount
0になります。
>>> conn = sqlite3.connect(':memory:')
>>> conn.execute('CREATE TABLE foo (bar, baz)')
<sqlite3.Cursor object at 0x1042ab6c0>
>>> conn.execute('INSERT INTO foo VALUES (1, 2)')
<sqlite3.Cursor object at 0x1042ab730>
>>> cursor = conn.cursor()
>>> cursor.execute('UPDATE foo SET baz=3 WHERE bar=2')
<sqlite3.Cursor object at 0x1042ab6c0>
>>> cursor.rowcount
0
>>> cursor.execute('UPDATE foo SET baz=3 WHERE bar=1')
<sqlite3.Cursor object at 0x1042ab6c0>
>>> cursor.rowcount
1
もちろん、存在しないテーブルまたは列を更新しようとすると、代わりに例外がスローされます。
>>> cursor.execute('UPDATE nonesuch SET baz=3 WHERE bar=2')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
sqlite3.OperationalError: no such table: nonesuch
>>> cursor.execute('UPDATE foo SET nonesuchcolumn=3 WHERE bar=2')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
sqlite3.OperationalError: no such column: nonesuchcolumn
sqlite3
Pythonに含まれているライブラリを使用してこれをデモしました。pysqlite2
Python2.5でその名前でPythonに追加されました。違いは単にインポートです。
try:
import sqlite3 # included library
except ImportError:
from pysqlite2 import dbapi2 as sqlite3 # use pysqlite2 instead