Как избежать вставки дублирующих данных в PostgreSQL? - PullRequest
0 голосов
/ 11 ноября 2011

Как избежать вставки дублирующих данных? Я только хочу вставить данные, которые еще не существуют. Я написал следующие запросы, но он не работает должным образом. Я использую 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).

Ответы [ 3 ]

0 голосов
/ 11 ноября 2011

Как я и подозревал (и @tony указывает на это) cursor.execute не возвращает количество строк.Всегда возвращается None.

0 голосов
/ 11 ноября 2011

Ответ, связанный с вашим обновлением:
Вы должны использовать символ "%" вместо запятой:

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 голосов
/ 11 ноября 2011

Попробуйте определить поле заголовка как уникальное (должно быть определено как varchar (constant_length)).Затем попробуйте вставить заголовок в базу данных, если заголовок существует, db вернет ошибку, иначе будет вставлено

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...