#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, если вам нужно выполнить пакетное использование инструкции insertchunksize
, см. Здесь pandas.pydata.org/pandas-docs/stable/reference/api /…3. @msanford я написал
sourceName
в обоих местах4. @Manakin Я тоже пробовал этот метод, но та же ошибка
5. Держу пари, вы указали
sourceName
, когда создавали таблицу. Вpsql
dod open_aq_location
и посмотрите, сохраняет ли столбец смешанный регистр. Если это произойдет, вам нужно будет заключить его в кавычки (quote_ident
) в запросе, иначе он будет свернут в нижний регистр и не будет соответствовать фактическому имени столбца.