You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas向PostgreSQL上传数据时避免覆盖原有数据的方法

解决Pandas向PostgreSQL追加时序数据不覆盖的问题

问题场景

你用Pandas向PostgreSQL的tableTest表上传时序数据时,原代码里if_exists='replace'会直接覆盖表中原有数据,尝试设置if_exists='True'却无法实现新增数据的需求(你的时序数据日期和值均唯一)。原代码如下:

import psycopg2
import pandas as pd
from sqlalchemy import create_engine

user = 'aaa'
passw= 'bbb'
host = 'ccc'
database = 'ddd'
conn_string = f'postgresql://{user}:{passw}@{host}/{database}'

df = pd.read_csv('20220817.csv')

db = create_engine(conn_string)
conn = db.connect()

table = 'tableTest'
df.to_sql(table, con=conn, if_exists='replace', index=False)

conn.close()

解决方法

你搞错了df.to_sql()的if_exists参数取值——这个参数的有效选项是'fail'、'replace'、'append',根本没有'True'这个值。要实现追加数据、不覆盖原有内容,只需要把参数改成'append'即可:

修改后的完整代码:

import psycopg2
import pandas as pd
from sqlalchemy import create_engine

user = 'aaa'
passw= 'bbb'
host = 'ccc'
database = 'ddd'
conn_string = f'postgresql://{user}:{passw}@{host}/{database}'

df = pd.read_csv('20220817.csv')

db = create_engine(conn_string)
conn = db.connect()

table = 'tableTest'
# 用append模式追加数据,保留原有内容
df.to_sql(table, con=conn, if_exists='append', index=False)

conn.close()

可选优化(针对潜在重复数据)

如果后续可能上传重复的时序数据(比如误传了同一日期的记录),可以先对DataFrame做去重处理,再执行追加:

# 假设你的日期列名为'date',根据该列去重,保留最新的一条记录
df = df.drop_duplicates(subset=['date'], keep='last')

内容的提问来源于stack exchange,提问作者Lleims

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 02:45:51