2011-11-11 32 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-ofrows-affected-by-cursor-executeselect) – tony

+0

@ madth3はい 'カーソル= db.cursor()' –

答えて

0

あなたの更新に関連する回答:
あなたが代わりにカンマ "%" 記号を使用する必要があります。@no_freedomはコメントで言ったように、より良いアプローチは

だと思う

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

更新

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

titleフィールドを一意(varchar(constant_length)として定義する必要があります)として定義してください。タイトルがあれば、データベースにタイトルを挿入してください。db return error else insert else

+0

は既にユニークです。しかし、私はターミナルでショーのエラーを望んでいません。 '見つかったら、スキップする '。 –

+0

テーブルにレコードを重複して渡した場合に備えて例外を処理できます。 – tony

+0

おそらく、実行関数からtitle_exists varに何が返ってきているかを調べることができます。次に、SQLから数えてみます。 –

0

私は(と@tonyが指摘する)cursor.executeは行数を返しません。常にNoneを返します。

+0

よろしくお願いいたします。試してみましょう –

+0

私は試しましたが、エラーメッセージが表示されています。コードは更新されます。 –

関連する問題