2015-12-30 4 views
2

Я использую встроенный python sqlite3 DB module.Получение дополнительной информации python sqlite exceptions

При вставке объектов в мои таблицы БД, после 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

использование же ид на письменном столе. В какой базе данных такой же идентификатор? Можете ли вы создать 2 файла (с тем же именем) в том же каталоге? – dsgdfg

+0

@dsgdfg, я знаю, что я вставляю тот же ключ, который должен быть уникальным. Мой вопрос заключается в получении дополнительной информации из исключений sqlite. – Samuel

+0

'sqlite exceptions' нуждается в reedit вашего пакета (это не очень хорошая идея). Очистите таблицу db и напечатайте 'which processing'? Это исключение вашего кода, а не sqlite. если используется генератор идентификаторов, проверьте, что не так. Нужно проверить таблицу db 'перед работой' (дубликаты, пустые значения, тип и т. Д.). @Samuel – dsgdfg

ответ

2

Я думаю, что это на самом деле все зависит от того, что вы используете для подключения к базе данных. Каждый модуль будет отображать различные ошибки.

Я лично использую 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 
+0

Спасибо Джейсон Я использую модуль sqlite3 - https://docs.python.org/2/library/sqlite3.html @Jason Heine – Samuel

+0

@Samuel Я обновил свой ответ, чтобы дать вам указания о том, как это сделать. Спасибо – CodeLikeBeaker

+0

Прохладный, спасибо! Собираюсь попробовать это :) – Samuel

Смежные вопросы