2011-11-11 131 views
0

如何避免插入重複數據?我只想插入不存在的數據。我已經撰寫了以下查詢,但其工作不正常。我正在使用PostgreSQL如何避免在PostgreSQL中插入重複數據?

title_exits = cursor.execute ("SELECT title,pageid FROM movie_movie WHERE title = %s AND pageid = %s;",(title,pageid)) 
    if title_exits == 0: 
     cursor.execute("INSERT INTO movie_movie (title,pageid,slug,language) values (%s,%s,%s,%s);",(title,pageid,slug,id)) 
    db.commit() 

更新:我試過result = cursor.fetchone ("SELECT count(*) FROM movie_movie WHERE title = %s AND pageid = %s;",(title,pageid))。但是我收到錯誤消息。 TypeError: fetchone() takes not arugments (2 given).

+0

那'cursor.execute'是來自psycopg2嗎? – madth3

+1

你看過這個問題和決定嗎? [鏈接](http://stackoverflow.com/questions/2511679/python-number-of-rows-affected-by-cursor-executeselect) – tony

+0

@ madth3是'cursor = db.cursor()' –

回答

0

涉及您的更新答

result = cursor.fetchone ("SELECT count(*) FROM movie_movie WHERE title = %s AND pageid = %s;" % (title,pageid)) 

更新

如@no_freedom在評論中說,認爲更好的辦法是

result = cursor.fetchone ("SELECT count(*) FROM movie_movie WHERE title = :1 AND pageid = :2", [title,pageid]) 

但我不確定,只是嘗試一下。

+0

http://bobby-tables.com/python.html –

+0

@no_freedom我認爲你是對的,我要更新我的答案。 – tony

+0

我試過了。但獲取相同的錯誤信息。 'TypeError:fetchone()不需要arugments(2給出)' –

0

嘗試將標題字段定義爲唯一(必須定義爲varchar(constant_length))。然後嘗試插入標題到數據庫如果標題存在,db返回錯誤否則將插入

+0

它已經是唯一的了。但我不想在終端上顯示錯誤。如果'找到然後跳過'。 –

+0

你可以處理一個異常,如果你有重複的記錄在桌子上,只是通過。 – tony

+0

也許你可以從執行函數中檢查title_exists var中返回的內容。然後嘗試從你的SQL計數。 –

0

正如我懷疑(和@tony指出)cursor.execute不會返回行數。它總是返回None
您應該使用 「%」 符號,而不是逗號:

+0

好的謝謝。讓我試試 –

+0

我試過但我收到錯誤消息。代碼正在更新。 –