Pandas to_sql возвращает ошибку 'отношение уже существует' при использовании if_exists = 'append' - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь ежедневно вставлять фрейм данных в таблицу в 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: '\ nCREATE TABLE my_schema. "My_table" (\ n \ tactual_weight FLOAT (53), ... "

...