如何在Python中获取SQLite结果/错误代码
如何从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
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源会发现:
- 从来没有人打过电话
- 调用并将结果作为异常消息公开
- 调用,但结果从不直接公开;它只是用来决定引发哪个异常类
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()
有跟踪这一缺陷,并努力使事情变得更好。