如何在Python中获取SQLite结果/错误代码

如何在Python中获取SQLite结果/错误代码,python,database,sqlite,Python,Database,Sqlite,如何从Python中的SQLite查询中获取(扩展的)结果/错误代码? 例如: con = sqlite3.connect("mydb.sqlite") cur = con.cursor() sql_query = "INSERT INTO user VALUES(?, ?)" sql_data = ("John", "MacDonald") try: cur.execute(sql_query, sql) self.con.commit() except sql

如何从Python中的SQLite查询中获取(扩展的)结果/错误代码? 例如:

con = sqlite3.connect("mydb.sqlite")
cur = con.cursor() 
sql_query = "INSERT INTO user VALUES(?, ?)"     
sql_data = ("John", "MacDonald")

try:
    cur.execute(sql_query, sql)
    self.con.commit()

except sqlite3.Error as er:
    # get the extended result code here
现在假设第一列应该是唯一的,并且在第一列中已经有一个带有“John”的数据库条目。这将抛出IntegrityError,但我想知道上所述的SQLite结果/错误代码。 我想知道,因为我想对不同的错误采取不同的操作。

目前,您无法通过Python的
sqlite3
模块获取错误代码。根据,C API分别通过
sqlite3\u errcode
sqlite3\u extended\u errcode
sqlite3\u errmsg
公开基本错误代码、扩展错误代码和错误消息。但是,搜索CPython源会发现:

  • 从来没有人打过电话
  • 调用并将结果作为异常消息公开
  • 调用,但结果从不直接公开;它只是用来决定引发哪个异常类
虽然您要求的功能很有用(事实上,我现在就需要它进行调试,并且对它的缺失感到失望),但它现在根本不存在。

\p>有关相关错误的更多信息可以通过以下方式获取:

import sqlite3
import traceback
import sys

con = sqlite3.connect("mydb.sqlite")
cur = con.cursor() 
sql_query = "INSERT INTO user VALUES(?, ?)"     
sql_data = ("John", "MacDonald")

try:
    cur.execute(sql_query, sql)
    self.con.commit()
except sqlite3.Error as er:
    print('SQLite error: %s' % (' '.join(er.args)))
    print("Exception class is: ", er.__class__)
    print('SQLite traceback: ')
    exc_type, exc_value, exc_tb = sys.exc_info()
    print(traceback.format_exception(exc_type, exc_value, exc_tb))
con.close()
有跟踪这一缺陷,并努力使事情变得更好。