Стоит задача импортировать определенные данные из EXCEL файла в postgres.
Таблица m_report , поле GuestIn_D
должно произойти:
INSERT INTO m_report (id, “GuestIn_D”) VALUES (nextval('“seq_ManagerReport”'), {полученное значение из файла})
В виду не опытности, пришел к выбору Pandas, Sqlalchemy
Таблица с выделенными данными для импорта:
Таблица.
import pandas as pd import psycopg2 import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm.session import sessionmaker from sqlalchemy import Table, MetaData, Column, Integer, Sequence, Date , String, ForeignKey base = declarative_base() engine = create_engine('postgresql+psycopg2://MyDash:7413227@localhost/MyDash') session=sessionmaker(bind=engine)() class m_report(base): __tablename__='m_report' id = Column(Integer, Sequence('seq_ManagerReport'), primary_key=True) # Date=Column(Date) GuestIn_D = Column(Integer) #чтение данных из файла file ='FileImport/EXCEL/text.xls' #Помещаем данные в DataFrame DF1 df1 = pd.read_excel(file) df_day = df1[df1.Description=='Guests Inhouse'][['Day']] df_day_value = df_day['Day'].tolist() add_Day_Guests_Inhouse = m_report(GuestIn_D=(df_day_value)) session.add(add_Day_Guests_Inhouse) session.commit()
при импорте возникает резонная ошибка что - не число
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.DatatypeMismatch) ОШИБКА: столбец "GuestIn_D" имеет тип numeric, а выражение - integer[] LINE 1: ...estIn_D") VALUES (nextval('"seq_ManagerReport"'), ARRAY[2]) ... ^ HINT: Перепишите выражение или преобразуйте его тип. [SQL: INSERT INTO m_report (id, "GuestIn_D") VALUES (nextval('"seq_ManagerReport"'), %(GuestIn_D)s) RETURNING m_report.id] [parameters: {'GuestIn_D': [2]}] (Background on this error at: http://sqlalche.me/e/13/f405)
я понимаю что возможно есть более элегантное решение (функция, использовать XLRD и тому подобное).. но мысли кончились .. перерыл интернет.. .. поделетес мыслями, возможно вы подскажете совершенно другое подход к этому решению