如何避免在PostgreSQL中插入重复数据?

时间:2011-11-11 08:04:20

标签: python 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).

3 个答案:

答案 0 :(得分:0)

尝试将标题字段定义为唯一(必须定义为varchar(constant_length))。然后尝试在标题存在的情况下将标题插入数据库,db return error else将插入

答案 1 :(得分:0)

正如我怀疑(和@tony指出)cursor.execute没有返回行数。它始终返回None

答案 2 :(得分: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])

但我不确定,只是尝试一下。