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

0 投票
3 回答
1453 浏览
提问于 2025-04-17 06:06

如何避免插入重复数据?我只想插入那些还不存在的数据。我写了以下查询,但它运行得不太好。我正在使用 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])

不过我不太确定,试试看吧。

撰写回答