我试图每天在Redshift的表中插入一个数据框。 to_sql命令可用于创建表,但是当我尝试附加到现有表时,即使使用if_exists ='append'参数,也会返回错误。
版本: 熊猫:0.23.4 sqlalchemy:1.2.15 psycopg2:2.7.6.1 Python:3.6.7
我还使用了猴子补丁来加快此处概述的插入操作:https://github.com/pandas-dev/pandas/issues/8953,但是如果没有此补丁,则插入操作所花费的时间过长(几个小时)。
#monkey patch to_sql for redshift
from pandas.io.sql import SQLTable
def _execute_insert(self, conn, keys, data_iter):
print ("Using monkey-patched _execute_insert")
data = [dict((k, v) for k, v in zip(keys, row)) for row in data_iter]
conn.execute(self.insert_statement().values(data))
SQLTable._execute_insert = _execute_insert
import pandas as pd
myDF.to_sql('my_table', engine, if_exists='append', schema = 'my_schema', index=False, chunksize = 10000)
这将返回以下错误:
“ ProgrammingError:(psycopg2.ProgrammingError)关系“ my_table”已存在 [SQL:'\ n创建表my_schema。“ my_table”(\ n \ tactual_weight FLOAT(53),...“