kan3k1k3n
@kan3k1k3n

Как правильно импортировать таблицу excel в бд postgre?

есть таблица в excel:
648d67fca16ec578966236.png
код на python для импорта таблицы в postgre (все типы данных в бд и excel - текст)
import openpyxl
import psycopg2


conn = psycopg2.connect(
    host="127.0.0.1",
    database="educational_practice",
    user="postgres",
    password=""
)
cur = conn.cursor()
workbook = openpyxl.load_workbook('data.xlsx')
worksheet = workbook['Ткани']
for row in worksheet.iter_rows(min_row=2, max_row=496, values_only=True):
    cur.execute("INSERT INTO excel.textile1 (vendor_code, name, color, drawing, composition, width, length, price) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)", row)
conn.commit()
cur.close()
conn.close()

но возникает ошибка:
not all arguments converted during string formatting

что не так?
  • Вопрос задан
  • 829 просмотров
Пригласить эксперта
Ответы на вопрос 1
Maksim_64
@Maksim_64
Data Analyst
Я бы в принципе рекомендовал использовать pandas для таких целей.
1. Читаем excel в pandas dataframe псевдокод будет такой.

import pandas as pd
df =pd.read_excel(data.xlsx,sheet_name=’Ткани’)

у функции read_excel много параметров, в том числе header, index_col которые возможно придется настраивать.

2. Глянул бы на него что таблица в порядке (это как фрейм запишется в базу), глянул бы на типы данных, df.dtypes что бы все типы колонок, были в том виде как их ожидает база. Если надо изменил бы их. Проверил бы есть ли пропущенные значения (nan, NA). Если есть провел бы работу с ними.

3. Затем бы отправлял в базу методом to_sql(). Псевдо код будет такой.
df.to_sql('table_name', connection, if_exists='replace')

Параметр if_exists (если таблица существует) имеет также метод append просто весь фрейм добавит новыми строками, и fail тогда будет ошибка.

У pandas хорошая документация и он силен в чтениях фалов любых форматов, так что если что то не получается, это почти всегда поправимо, ну и как писать в базу тоже конфигурируется очень удобно, так что если в этом будут проблемы то тоже решается.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы