Ошибки записи кадра данных в DB2 с использованием Pandas to_sql - PullRequest
1 голос
/ 16 апреля 2019

Я пытаюсь загрузить данные из фрейма данных 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'
...