2015-12-30 30 views
2

我正在使用python的內建sqlite3 DB module獲取更多信息表python sqlite異常

雖然將對象插入我的數據庫表,以下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

使用相同的ID。哪個數據庫允許相同的ID?你可以在同一個目錄下創建兩個文件(同名)嗎? – dsgdfg

+0

@dsgdfg,我知道我插入相同的密鑰,應該是唯一的。我的問題是關於從sqlite異常獲取更多信息 – Samuel

+0

'sqlite異常'需要reedit你的包(不是個好主意)。清理你的數據庫表並打印'處理過的'?這是你的代碼異常而不是sqlite。如果使用ID生成器檢查什麼是錯誤的。在工作之前需要檢查數據庫表(複製,空白值,類型等)。 @塞繆爾 – 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

酷,thanx!去試試:) – Samuel