SQLSERVER -> Python (Аналитика) df -> POSTGRESSQL INSERT (ЕЖЕДНЕВНОЕ РАСПИСАНИЕ)
Postgres 1. Фактическая таблица - «ДРАГОЦЕННОСТИ» 2. Таблица температур - «Температура»
Я использую python для запроса SQL сервера, после подготовки данных pandas df необходимо вставить данные в PostgreSQL.
Я создал временную таблицу, чтобы избежать ошибок дублирования при вставке в PostgreSQL фактическую таблицу с помощью запроса python.
Я новичок в PostgreSQL и SQL. Хотите узнать, есть ли лучший способ
import io
import pyodbc
import psycopg2
import pandas as pd
from sqlalchemy import create_engine
sql_conn = pyodbc.connect('DRIVER={SQL Server};SERVER=IOT-BODY1-PROD\IOT_STAGE;PORT=1433;UID=***;PWD=****;')
engine = create_engine('postgresql+psycopg2://postgres:postgres@IOT:5432/Energy')
conn = engine.raw_connection()
cur = conn.cursor()
df.head(0).to_sql('GEMS', engine, if_exists='append',index=False) #-Actual Table
df.head(0).to_sql('temp', engine, if_exists='append',index=False) #Temp Table
#cols=['DATETIME','SHOP','KWH','HOUR','DATE','TIME','ZCDAY','UID','SHIFT','WERKS']
if len(df) > 0:
df_columns = list(df)
# create (col1,col2,...)
columns = ",".join(df_columns)
for i in columns:
output = io.StringIO()
df.to_csv(output, sep='\t', header=False, index=False)
output.seek(0)
contents = output.getvalue()
cur.copy_from(output, 'temp',null="")
cur.execute("""Insert into public."""+'"{}"'.format(i)+""" select * From public.temp ON CONFLICT DO NOTHING;""");
cur.execute("""Delete FROM public.temp;""");
conn.commit()
Ошибка:
---> 13 cur.copy_from(output, 'temp',null="")
14 cur.execute("""Insert into public."""+'"{}"'.format(i)+""" select * From public.temp ON CONFLICT DO NOTHING;""");
15 cur.execute("""Delete FROM public.temp;""");
InFailedSqlTransaction: current transaction is aborted, commands ignored until end of transaction block
Как решить эту ошибку?