我的Python应用程序使用Psycopg2将Web scraper中的内容插入PostgreSQL数据库。 Psycopg2抱怨某个主键已经存在,即使它显然没有。
错误:
psycopg2.IntegrityError: duplicate key value violates unique constraint "my_table_pkey"
DETAIL: Key (id)=(12345) already exists.
查询:
SELECT * FROM my_table where id=12345;
-- 0 rows returned
这里发生了什么?
编辑后台:
基本上,代码所做的就是抓住一个讨论论坛,在每个讨论话题中循环每个页面,并将每个线程中的一些数据插入到Postgres中。代码的一般结构概述如下。请注意,get
为每个线程返回格式良好的数据结构。
import psycopg2
base_url 'http://someforum.com'
conn = psycopg2.connect('dbname=mydb user=me')
for i in range(10000):
thread = get('{}/'{}.format(base_url, i)
for page in thread:
sql = 'INSERT INTO my_table (id, foo, bar) VALUES(%s, %s, %s);'
values = [page['id'], page['foo'], page['bar']]
cur.execute(sql, values)
conn.commit()
cur.close()
conn.close()
答案 0 :(得分:2)
经过一番挖掘,我发现我抓的论坛有时会为给定的帖子返回错误的页数。因此,当应用程序尝试刮取第5页(不存在)时,它会被重定向到第4页并尝试再次插入相同的帖子。因此,完整性错误。