2016-04-09 37 views
2

Veritabanımın çok büyük büyümesini önlemek için sqlite yalnızca henüz eklenmemiş değerleri eklemek istiyorum. Bazı aramalar yaptım ve en iyi yolun UNIQUE kısıtlaması kullanmak olduğunu düşündüm. Bana öyle geliyor ki, BENZERSİZ olmayan bir değer eklerken sqlite çöküyor, bu hatayı nasıl atlatabilirim ve bir sonraki sunumla devam edebilirim?sqlite3, IntegrityError: UNIQUE kısıtlaması bir değer eklerken başarısız oldu

Aşağıda ilgili bazı kodlar bulunmaktadır.

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] 

cevap

10

Değişim INSERTINSERT OR IGNORE için: Burada

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 olan

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

Değiştir "INSERT" "INSERT VEYA DEĞİŞTİRİN" daha iyidir etmek ...

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() 
İlgili konular