【问题标题】:How to tell whether an update statement is successful in pysqlite 2.6.3如何判断 pysqlite 2.6.3 中的更新语句是否成功
【发布时间】:2013-02-09 23:03:01
【问题描述】:

我正在使用 pysqlite 与 SQLite 数据库通信,我想知道检查 UPDATE SQL 语句是否实际上已成功更新表中的某些内容的正确方法是什么。

pysqlite 中执行此操作后是否有我可以快速检查的变量?

【问题讨论】:

    标签: python sqlite pysqlite


    【解决方案1】:

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

    【讨论】:

    • 我认为不成功意味着“失败”——而不是仅仅没有更新任何东西......
    • 正是我的意思 - 只是因为某些东西不会影响任何行,并不意味着它不成功 :) 它成功了,但实际上并没有做任何事情!?
    • @JonClements:是 OP 要求一个变量,让我认为它是关于不匹配的行,真的。我想说,这个例外有点明显。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多