Я пытаюсь загрузить данные из фрейма данных pandas в среду IBM DB2 Data Warehouse. Таблица уже существует, поэтому я просто добавляю строки в таблицу. Я построил фрейм данных, чтобы точно отразить каждое поле таблицы.
Я использую метод to_sql для Pandas, чтобы попытаться получить данные из фрейма данных в таблицу. Я уже знаю, что я подключен к базе данных, но когда я запускаю код, я получаю следующую ошибку:
AttributeError: 'function' object has no attribute 'cursor'
Я не видел ничего в документации для панд о необходимости определять курсор при использовании to_sql. Любая помощь будет оценена.
Я пытался написать прямое выражение вставки SQL вместо использования to_sql, но не смог заставить его работать должным образом. У меня уже есть метод to_csv, в котором я записываю фрейм данных в файл csv, поэтому я хотел бы просто использовать тот же фрейм данных для вставки в таблицу.
Я не могу добавить слишком много кода, так как это проект компании, но в таблице 15 столбцов с разными типами данных (десятичная, символьная, временная метка).
Это мое утверждение to_sql:
`output_df.to_sql(name='PD5', con=self.db2_conn, schema='REBTEAM', if_exists='append', index=False)`
Я ожидаю, что таблица будет загружена со строками. Используемый мной тестовый файл содержит 880 строк, поэтому я ожидаю, что в таблице будет 880 строк.
Вот полное сообщение об ошибке, которое я получаю:
Warning (from warnings module):
File "C:\Users\dt24358\lib\site-packages\pandas\core\generic.py", line 2531
dtype=dtype, method=method)
UserWarning: The spaces in these column names will not be changed. In pandas versions < 0.14, spaces were converted to underscores.
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\dt24358\lib\tkinter\__init__.py", line 1705, in __call__
return self.func(*args)
File "C:\Users\dt24358\Scripts\Pricing Tool\Rebate_GUI_SQL.py", line 100, in <lambda>
command= lambda: self.submit_click(self.path, self.fileName, self.save_location, self.request_var.get(), self.execution_var.get(),self.dt_user_id, self.rebateAggregator))
File "C:\Users\dt24358\Scripts\Pricing Tool\Rebate_GUI_SQL.py", line 210, in submit_click
output_df.to_sql(name='PD5', con=self.db2_conn, schema='REBTEAM', if_exists='append', index=False)
File "C:\Users\dt24358\lib\site-packages\pandas\core\generic.py", line 2531, in to_sql
dtype=dtype, method=method)
File "C:\Users\dt24358\lib\site-packages\pandas\io\sql.py", line 460, in to_sql
chunksize=chunksize, dtype=dtype, method=method)
File "C:\Users\dt24358\lib\site-packages\pandas\io\sql.py", line 1546, in to_sql
table.create()
File "C:\Users\dt24358\lib\site-packages\pandas\io\sql.py", line 572, in create
if self.exists():
File "C:\Users\dt24358\lib\site-packages\pandas\io\sql.py", line 560, in exists
return self.pd_sql.has_table(self.name, self.schema)
File "C:\Users\dt24358\lib\site-packages\pandas\io\sql.py", line 1558, in has_table
return len(self.execute(query, [name, ]).fetchall()) > 0
File "C:\Users\dt24358\lib\site-packages\pandas\io\sql.py", line 1426, in execute
cur = self.con.cursor()
AttributeError: 'function' object has no attribute 'cursor'