2016-04-09 4 views
2

データベースのサイズが大きくなりすぎないように、sqliteにはまだ挿入されていない値を挿入します。私はいくつかの検索を行っており、そうする最良の方法はUNIQUE制約を使うことだと考えました。ユニークではない値を挿入するとsqliteがクラッシュするようですが、このエラーを回避して次のサブミットを続行するにはどうしたらいいですか?sqlite3、IntegrityError:値を挿入するときにUNIQUE制約に失敗しました

以下は関連するコードです。ここで

sql = sqlite3.connect('submissions.db') 
cur = sql.cursor() 
cur.execute('CREATE TABLE IF NOT EXISTS some_table(id TEXT UNIQUE)') 
sql.commit() 

for thing in things: 
    try: 
     # Do some stuff 
    except AttributeError: 
     pass 

    cur.execute('INSERT INTO some_table VALUES(?)', [thing]) 
    sql.commit() 

はトレースバックです:

Traceback (most recent call last): 
    File "D:\Directory\Python\Projects\Oddshotcrawler for Reddit, globaloffensive\oddshotcrawler.py", line 62, in <module> 
    oddshotcrawler() 
    File "D:\Directory\Python\Projects\Oddshotcrawler for Reddit, globaloffensive\oddshotcrawler.py", line 54, in oddshotcrawler 
    cur.execute('INSERT INTO oldposts VALUES(?)', [thing]) 
sqlite3.IntegrityError: UNIQUE constraint failed: some_table.id 
[Finished in 7.1s with exit code 1] 

答えて

10

変更INSERTINSERT OR IGNOREへ:

cur.execute('INSERT OR IGNORE INTO oldposts VALUES(?)', [submID]) 
0

変更 "INSERT" "INSERT OR REPLACE" に それが良いでしょう...

Update_Table = """INSERT OR REPLACE INTO station_statusDB VALUES(?, ?, ?, ?);""" 
with sql.connect(station_statusDB) as Conn: 
    print("Connected to:", station_statusDB) 
    Conn.execute(New_Station_Table) 
    while Client_Flag != 0: 
     print("Updating Station Database...") 
     Conn.execute(Update_Table, (ClientID, Client_date, Client_Alarm, Client_Water)) 
     print("Done!, Saving...") 
     Conn.commit() 
関連する問題