【发布时间】:2016-01-25 19:32:09
【问题描述】:
我有一个使用 Psycopg 适配器的 python 脚本;我正在解析一个 JSON 数组并插入到我的 PostgreSQL 数据库中。
for item in data["SchoolJSONData"]:
mId = item.get("Id")
mNumofRooms = item.get("NumofRooms")
mFloors = item.get("Floors")
con = None
con = psycopg2.connect("dbname='database' user='dbuser'")
cur = con.cursor()
cur.execute('INSERT INTO Schools(Id, NumofRooms, Floors)VALUES(%s, %s, %s)',(mId, mNumofRooms, mFloors))
con.commit()
每次我再次运行脚本时,都会得到以下信息:
psycopg2.IntegrityError: duplicate key value violates unique constraint "schools_pkey"
如何运行插入脚本以忽略数据库中的现有条目?
编辑:感谢所有回复...我试图不覆盖任何数据,只添加(如果 PK 尚未在表中),并忽略任何错误。就我而言,我只会添加新条目,从不更新数据。
【问题讨论】:
-
你想要的叫做upsert。新版本有一个syntax。但是,如果您使用旧版本,请查看此线程 — stackoverflow.com/questions/1109061/…。基本上,您想捕获异常,但我不确定,您应该忽略它。如果你的应用有更新的数据,更新数据库中的数据不是更好吗?
-
谢谢@thatyoungman,虽然在我的用例中插入永远不会更新,如果主键不存在,只需添加一个新的数据行。我会考虑迁移到较新版本的 Python,看看是否有办法实现这一点。
-
嗯,你的问题与python无关,我的链接参考postgresql docs,“新版本”是PostgreSQL 9.5。
标签: python sql postgresql psycopg