Это то, что мой sql для создания временной таблицы таблица в postgres выглядит так:
Код: Выделить всё
sql_create=f'drop table if exists tmp_tbl; CREATE TEMPORARY TABLE tmp_tbl ON COMMIT DROP AS SELECT {cols} FROM {table_name} LIMIT 0;'
Вот код для вставки кадра данных во временную таблицу:
Код: Выделить всё
try:
with psycopg.connect(self.connect_str, autocommit=False) as conn:
io_buf = io.StringIO()
df.to_csv(io_buf, sep='\t', header=False, index=False)
io_buf.seek(0)
with conn.cursor() as cur:
cur.execute(sql_create)
with cur.copy(sql_copy) as copy:
while data:=io_buf.read(self.batch_size):
copy.write(data)
cur.execute(sql_full)
except Exception as ex:
self.log.error(ex)
raise ex
Код: Выделить всё
@staticmethod
def escape_df(df):
# for col in df.select_dtypes(include=['object']):
# df[col] = np.array([str(item).replace("'", "''") for item in df[col].values])
# return df
for col in df.select_dtypes(include=['object']):
df[col] = np.where(df[col].str.contains("''"),
df[col],
df[col].str.replace("'", "''"))
return df
Я пробовал экранировать с помощью 4 одинарных кавычек , то же самое.
Я пробовал использовать csv.QUOTE_NONE, csv.QUOTE_MINIMAL, все то же самое.
у кого-нибудь есть мысли, как решить это?
Подробнее здесь: https://stackoverflow.com/questions/791 ... py-to-main