我有一个使用Psycopg适配器的python脚本;我解析一个JSON数组并插入到我的PostgreSQL数据库中。如何Python PosgreSQL插入如果不存在?
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"
如何运行插入脚本,以便它将忽略数据库中的现有条目?
编辑:谢谢你的答复所有...我试图不覆盖任何数据,只有ADD(如果PK不在表中),并忽略任何错误。在我的情况下,我只会添加新的条目,而不会更新数据。
你想要什么被称为[upsert](https://wiki.postgresql.org/wiki/UPSERT)。新版本有一个[语法](http://www.postgresql.org/docs/9.5/static/sql-insert.html#SQL-ON-CONFLICT)。但是,如果您使用旧版本,请参阅此主题 - http://stackoverflow.com/questions/1109061/insert-on-duplicate-update-in-postgresql。基本上,你想捕捉异常,但我不知道,你应该忽略它。如果您的应用程序具有较新的数据,那么更新数据库不是更好吗? –
感谢@thatyoungman,尽管在我的用例中插入将永远不会更新,只需在数据中添加一个新的行,如果主键尚未存在。 我将考虑转移到新版本的Python,看看是否有办法实现这一点。 – Bajan
那么,你的问题没有与python连接,我的链接是指postgresql文档,“新版本”是PostgreSQL 9.5。 –