如何判断pysqlite 2.6.3中的更新语句是否成功

MLi*_*ter 2 python sqlite pysqlite

我正在使用pysqlite与SQLite数据库进行对话,我想知道检查UPDATESQL语句是否实际上已成功更新表中的内容的正确方法是什么.

是否有一个变量,我可以在执行后快速检查pysqlite

Mar*_*ers 8

检查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
Run Code Online (Sandbox Code Playgroud)

当然,如果您尝试更新不存在的表或列,则会抛出异常:

>>> 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
Run Code Online (Sandbox Code Playgroud)

我使用Python附带的sqlite3来演示这个; pysqlite2在Python 2.5中以该名称添加到Python中.区别仅在于输入:

try:
    import sqlite3  # included library
except ImportError:
    from pysqlite2 import dbapi2 as sqlite3  # use pysqlite2 instead
Run Code Online (Sandbox Code Playgroud)

  • 我认为不成功意味着“失败” - 而不仅仅是没有更新任何内容...... (2认同)