Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用违反UniqueConstraint/w SqlAlchemy将pd.DataFrame摄取到SQL数据库的最佳方法_Python_Pandas_Sqlalchemy - Fatal编程技术网

Python 使用违反UniqueConstraint/w SqlAlchemy将pd.DataFrame摄取到SQL数据库的最佳方法

Python 使用违反UniqueConstraint/w SqlAlchemy将pd.DataFrame摄取到SQL数据库的最佳方法,python,pandas,sqlalchemy,Python,Pandas,Sqlalchemy,我想使用SqlAlchemy将pd.DataFrame中的数据摄取到sql数据库中。数据包含一些仍在数据库中的行,这会导致UniqueViolation错误。这个问题的实际运行版本在行上有太多的循环,并提交每一行 data = pd.read_json('data_to_ingest_into_db.JSON') for _, row in data.iterrows(): try: session.add(generate_obs_data_object(row_dic

我想使用SqlAlchemy将pd.DataFrame中的数据摄取到sql数据库中。数据包含一些仍在数据库中的行,这会导致UniqueViolation错误。这个问题的实际运行版本在行上有太多的循环,并提交每一行

data = pd.read_json('data_to_ingest_into_db.JSON')
for _, row in data.iterrows():
    try:
        session.add(generate_obs_data_object(row_dict))
        session.commit()
    except (
            exc.IntegrityError, errors.UniqueViolation,
            exc.DataError) as e:
        session.rollback()
        continue

我相信这个解决办法并不是解决这类问题的最佳办法。我认为像bulk_insert和replace这样的东西可以修复它,但是SqlAlchemy并没有提供这样的功能

您可以加载到一个暂存表中,然后合并新行?@datanoveler您的意思是从数据库中获取整个表以将其视为暂存表吗?该表有数百万行。否若要将数据帧视为暂存表,请将其加载到临时/暂存表中,然后处理SQL中的逻辑,即仅加载增量并用较新的增量替换唯一行。