从python sqlite异常中获取更多信息

时间:2015-12-30 13:26:24

标签: python sqlite python-2.7

我正在使用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例外获取最多信息的正确方法是什么?

由于

1 个答案:

答案 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