2

私はSQLiteデータベースと通信するために使用していますが、 SQLステートメントが実際にテーブル内の何かを正常に更新したpysqliteかどうかを確認する正しい方法は何でしょうか。UPDATE

実行後にすぐに確認できる変数はありますpysqliteか?

4

1 に答える 1

10

cursor.rowcount属性を確認してください。影響を受ける行の数を示します。

UPDATE成功しなかった場合はrowcount0になります。

>>> 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

sqlite3Pythonに含まれているライブラリを使用してこれをデモしました。pysqlite2Python2.5でその名前でPythonに追加されました。違いは単にインポートです。

try:
    import sqlite3  # included library
except ImportError:
    from pysqlite2 import dbapi2 as sqlite3  # use pysqlite2 instead
于 2013-02-09T23:20:33.887 に答える