【发布时间】:2013-02-09 23:03:01
【问题描述】:
我正在使用 pysqlite 与 SQLite 数据库通信,我想知道检查 UPDATE SQL 语句是否实际上已成功更新表中的某些内容的正确方法是什么。
在pysqlite 中执行此操作后是否有我可以快速检查的变量?
【问题讨论】:
我正在使用 pysqlite 与 SQLite 数据库通信,我想知道检查 UPDATE SQL 语句是否实际上已成功更新表中的某些内容的正确方法是什么。
在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
我使用 Python 附带的sqlite3 library 来演示这个; pysqlite2 在 Python 2.5 中以该名称添加到 Python。区别仅在于导入:
try:
import sqlite3 # included library
except ImportError:
from pysqlite2 import dbapi2 as sqlite3 # use pysqlite2 instead
【讨论】: