Неопределенный столбец postgres Python

#python #python-3.x #pandas #postgresql #dataframe

#python #python-3.x #панды #postgresql #фрейм данных

Вопрос:

У меня есть фрейм данных, приведенный ниже. Имена столбцов одинаковы как в dataframe, так и в базе данных. при вставке этих данных в базу данных это выдало мне ошибку

     ---------------------------------------------------------------------------
UndefinedColumn                           Traceback (most recent call last)
<ipython-input-19-4d8cc1308822> in <module>
      4 for i,row in df.iterrows():
      5     sql = "INSERT INTO open_aq_location ("  cols   ") VALUES ("   "%s,"*(len(row)-1)   "%s)"
----> 6     cursor.execute(sql, row)
      7 
      8 #     # the connection is not autocommitted by default, so we must commit to save our changes

UndefinedColumn: column "sourcename" of relation "open_aq_location" does not exist
LINE 1: ...cation (id,country,city,cities,location,locations,sourceName...
                                                             ^
 

 |id    |country |   city             |      cities         |location |locations |sourceName   | sourceNames   | sourceType  |   sourceTypes   |               coordinates                     |    firstUpdated           | lastUpdated                |        parameters              |       countsByMeasurement               | count  |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|AD-1  |  AD    | Escaldes-Engordany |[Escaldes-Engordany] |AD0942A  |[AD0942A] |EEA Andorra  | [EEA Andorra] | government  |   [government]  | {'longitude': 1.53914, 'latitude': 42.50969}  | 2017-09-13T21:00:00.000Z  | 2020-12-18T12:00:00.000Z   |    [co, no2, o3, pm10, so2]    |   [{'parameter': 'co', 'count': 32426}, | 161833 |
|AD-2  |  AD    | Escaldes-Engordany |[Escaldes-Engordany] |AD0944A  |[AD0944A] |EEA Andorra  | [EEA Andorra] | government  |   [government]  | {'longitude': 1.56525, 'latitude': 42.51694}  | 2017-09-13T21:00:00.000Z  | 2020-12-18T12:00:00.000Z   |    [o3]                        |   [{'parameter': 'o3', 'count': 32455}] | 32455  |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 

Код:

 cols = ",".join([str(i) for i in df.columns.tolist()])
print(cols)
# Insert DataFrame recrds one by one.
for i,row in df.iterrows():
    sql = "INSERT INTO col_name ("  cols   ") VALUES ("   "%s,"*(len(row)-1)   "%s)"
    cursor.execute(sql, row)

#     # the connection is not autocommitted by default, so we must commit to save our changes
    conn.commit()
 

Комментарии:

1. Вы пробовали использовать sourceName вместо sourcename ?

2. Я бы рекомендовал использовать pandas.to_sql вместо iterrows, если вам нужно выполнить пакетное использование инструкции insert chunksize , см. Здесь pandas.pydata.org/pandas-docs/stable/reference/api /…

3. @msanford я написал sourceName в обоих местах

4. @Manakin Я тоже пробовал этот метод, но та же ошибка

5. Держу пари, вы указали sourceName , когда создавали таблицу. В psql do d open_aq_location и посмотрите, сохраняет ли столбец смешанный регистр. Если это произойдет, вам нужно будет заключить его в кавычки ( quote_ident ) в запросе, иначе он будет свернут в нижний регистр и не будет соответствовать фактическому имени столбца.