【发布时间】:2019-05-18 02:08:57
【问题描述】:
我有一个包含 100 多列的 DataFrame,我正在尝试将其写入 SQL 表。 这是一个完整数据加载的日常流程,它看起来像这样:
now = datetime.datetime.now()
filename = 'extract_' + str(now)[:10]
output = "./output"
sql_df = pd.read_csv(os.path.join(output,filename + '.csv'))
server = "redshift+psycopg2://%s:%s@%s:%s/%s" % (USER,PASSWORD,HOST,str(PORT),DATABASE)
engine = sa.create_engine(server, connect_args={'sslmode': 'verify-ca'}, use_batch_mode=True)
conn = engine.raw_connection()
conn.cursor().execute("truncate table")
%time sql_df.to_sql('table', engine, index=False, if_exists='append')
我收到以下错误:ProgrammingError: (psycopg2.ProgrammingError) column "column" of relation "table" does not exist。
有人可以澄清为什么to_sql 比较 DataFrame 和表的标题(并且除非全部匹配,否则不允许操作),而不是仅仅插入适当的值而不包括标题行?如果不是将 DF 写入 SQL,而是将 csv 上传到 S3,则使用“复制”-没有错误..
我能做些什么来忽略标题并只插入值?
【问题讨论】:
标签: python sql pandas sqlalchemy amazon-redshift