我正在使用python的内置sqlite3 DB module。
在将对象插入我的数据库表时,会出现optionSelected
异常:
sqlite
由于每个对象有不同的插入方法,我无法确定它在哪个表中失败:
"PRIMARY KEY must be unique"
import sqlite3
...
class SomeObject1:
....
def _insert_some_object1(self, db_object):
self._cursor.execute('insert into %s values (?,?,?)' % TABLE_NAME,
(db_oject.v1, db_object.v2, db_object_v3,))
main()
被except Exception as e:
抓住,所以这只是我得到的信息。
我想知道哪个表插入失败,失败的值等等......
从sqlite
例外获取最多信息的正确方法是什么?
由于
答案 0 :(得分:3)
我认为这完全取决于您使用什么来连接数据库。每个模块都会显示不同的错误。
我个人使用sqlalchemy,它会给你详细的错误。这是一个显示我的意思的例子(注意:这只是一个例子,我个人不支持内联sql):
import sqlalchemy
connection = sqlalchemy.create_engine('sqlite:///mydb.db')
cursor = connection.connect()
query = "INSERT INTO my_table (id, name) values(1, 'test');"
cursor.execute(query)
返回的错误:
sqlalchemy.exc.IntegrityError: (IntegrityError) PRIMARY KEY must be unique "INSERT INTO my_table (id, name) values(1, 'test');" ()
就核心sqlite3模块而言,我不相信它会显示已执行的查询。如果您不使用sqlalchemy等模块,则需要自行处理并显示错误。看一下这个例子:
import sqlite3
def execute(query):
try:
conn = sqlite3.connect('mydb.db')
c = conn.cursor()
c.execute(query)
conn.commit()
except Exception as err:
print('Query Failed: %s\nError: %s' % (query, str(err)))
finally:
conn.close()
execute("INSERT INTO my_table (id, name) values(1, 'test');")
输出错误:
Query Failed: INSERT INTO weapon (id, name) values(1, 'test');
Error: PRIMARY KEY must be unique