我正在使用SQLAlchemy 1.1.0b将大量数据插入到PostgreSQL中,并且出现重复键错误。使用SQLAlchemy批量插入
from sqlalchemy import *
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.automap import automap_base
import pg
engine = create_engine("postgresql+pygresql://" + uname + ":" + passw + "@" + url)
# reflectively load the database.
metadata = MetaData()
metadata.reflect(bind=engine)
session = sessionmaker(autocommit=True, autoflush=True)
session.configure(bind=engine)
session = session()
base = automap_base(metadata=metadata)
base.prepare(engine, reflect=True)
table_name = "arbitrary_table_name" # this will always be arbitrary
mapped_table = getattr(base.classses, table_name)
# col and col2 exist in the table.
chunks = [[{"col":"val"},{"col2":"val2"}],[{"col":"val"},{"col2":"val3"}]]
for chunk in chunks:
session.bulk_insert_mappings(mapped_table, chunk)
session.commit()
当我运行它,我得到这样的:我好像
sqlalchemy.exc.IntegrityError: (pg.IntegrityError) ERROR: duplicate key value violates unique constraint <constraint>
不能正确实例化mapped_table
为Table()
对象,无论是。
我正在处理时间序列数据,所以我在时间范围内重叠地抓取数据。我想做一个批量上传来确保数据的一致性。
做一个大型数据集的批量upsert最好的方法是什么?我现在知道PostgreSQL support upserts,但我不确定如何在SQLAlchemy中执行此操作。
的[SQLAlchemy的可能的复制 - 如果存在执行批量更新插入(,更新,否则插入)在postgresql](http://stackoverflow.com/questions/25955200/sqlalchemy-performing-a-bulk-upsert-if-exists-update-else-insert-in-postgr) – FelixSFD
可能重复的[如何在PostgreSQL中UPSERT(MERGE,INSERT ... ON DUPLICATE UPDATE)?](https://stackoverflow.com/questions/17267417/how-to-upsert-merge-insert-on-duplicate-update-in-postgresql ) – rjv