Próbuję stworzyć bazę danych tabel SQL do przechowywania w centralnej lokalizacji bazy danych.

Używam tego polecenia, aby przejść przez katalog 1300 plików CSV i dołącz do bazy danych PostgreSQL. Źródło wyświetli nazwę pliku bez ".csv", aby mógł go przywrócić, kiedy go potrzebuję.

import pandas as pd
import sqlalchemy
import psycopg2
import time
import os

engine = sqlalchemy.create_engine('postgresql://user@127.0.0.1',isolation_level='AUTOCOMMIT')

for filename in os.listdir(filepath):
    file_path = os.path.join(filepath, filename)
    column = filename[:-4]
    column = column.lower()
    pd.read_csv(file_path, index_col=0).assign(Source=column).to_sql('test', if_exists='append', con=engine)

Wypróbuję następujące polecenie, ale ciągle biegam w następujący błąd po otwarciu 2 pliku.

UndefinedColumn                           Traceback (most recent call last)
~/miniconda3/envs/scraper/lib/python3.8/site-packages/sqlalchemy/engine/base.py in _execute_context(self, dialect, constructor, statement, parameters, *args)
   1255                 if not evt_handled:
-> 1256                     self.dialect.do_executemany(
   1257                         cursor, statement, parameters, context

~/miniconda3/envs/scraper/lib/python3.8/site-packages/sqlalchemy/dialects/postgresql/psycopg2.py in do_executemany(self, cursor, statement, parameters, context)
    872         if self.executemany_mode is EXECUTEMANY_DEFAULT:
--> 873             cursor.executemany(statement, parameters)
    874             return

UndefinedColumn: column "HSJSJKSAAISKD" of relation "test" does not exist
LINE 1: INSERT INTO test ("DATE", "HSJSJKSAAISKD", "Source") VALUE...
                                 ^


The above exception was the direct cause of the following exception:

ProgrammingError                          Traceback (most recent call last)
<ipython-input-12-5f59a73397c3> in <module>
      7     column = column.lower()
      8     print(column)
----> 9     pd.read_csv(file_path, index_col=0).assign(Source=column).to_sql('test', if_exists='append', con=engine)
.....
.....
ProgrammingError: (psycopg2.errors.UndefinedColumn) column "HSJSJKSAAISKD" of relation "test" does not exist
LINE 1: INSERT INTO test ("DATE", "HSJSJKSAAISKD", "Source") VALUE...
0
anarchy 19 październik 2020, 21:55

1 odpowiedź

Najlepsza odpowiedź

Błąd mówi, że kolumna nie jest obecna w tabeli. Przed napisaniem do bazy danych możesz wydrukować ramkę danych i sprawdzić, czy wszystkie kolumny obecne w ramce danych są dopasowane do tabeli bazy danych

1
sandeep patil 19 październik 2020, 19:11