如何避免在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 no arguments (2 given).
3 个回答
0
正如我猜测的那样(@tony也提到过),cursor.execute这个方法并不会返回行数。它总是返回None
。
0
试着把标题字段设置为唯一的(必须定义为固定长度的字符串)。然后,如果标题已经存在,就尝试把标题插入到数据库中,数据库会返回错误;如果标题不存在,就可以成功插入。
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])
不过我不太确定,试试看吧。