Попытка преобразовать pyodbc.Row
в список или кортеж, потому что я пытаюсь добавить данные в таблицу mysql.
Попробовал понимание списка, которое, похоже, не сработало.
import pymysql
import pymysql.cursors
import pyodbc
import psycopg2
from db_credentials import ...
class ETLOverwrite():
def __init__(self, database, sql_query, to_table):
self.database = database
self.sql_query = sql_query
self.to_table = to_table
def load_to_db(self):
print('\nStarting upload...\n')
# CONNECT TO SOURCE DATABASE
if self.database == '...':
source_conn = pymysql.connect(**...)
elif self.database == '...':
source_conn = pyodbc.connect(**...)
elif self.database == '...':
source_conn = psycopg2.connect(**...)
# EXTRACT SOURCE DATA
with source_conn.cursor() as source_cursor:
source_cursor.execute(sql_query)
field_names = [i[0] for i in source_cursor.description]
field_names = ', '.join(field_names)
fetched_data = source_cursor.fetchall()
data = [rows for rows in fetched_data]
source_conn.commit()
source_conn.close()
from pprint import pprint
pprint(field_names)
print('\n')
pprint(data[:10])
print('\n')
print(type(data[0]))
print('\n')
# CONNECT TO TARGET DATABASE
target_conn = pymysql.connect(**..., charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)
with target_conn.cursor() as target_cursor:
placeholders = ', '.join(['%s'] * len(data[0]))
insert_statement = "INSERT INTO %s (%s) VALUES (%s)" % (self.to_table, field_names, placeholders)
print(insert_statement)
target_cursor.executemany(insert_statement, data)
target_conn.commit()
target_conn.close()
print('Finished')
Ожидайте увидеть все, что вставлено в таблицу целевой базы данных. Вместо этого я получаю следующую ошибку: AttributeError: 'pyodbc.Row' object has no attribute 'translate'
Когда я пытаюсь преобразовать извлеченные данные в список из pyodbc.Row, используя понимание списка, это не похоже на работу. Вот окончательный вывод
Starting upload...
'id, currency, commission_amount'
[(4315245, 'GBP', Decimal('1.0000000000')),
(5235235, 'GBP', Decimal('1.0000000000')),
(23523523, 'GBP', Decimal('1.0000000000')),
(53253, 'GBP', Decimal('1.0000000000')),
(32523, 'GBP', Decimal('1.0000000000')),
(3456344, 'GBP', Decimal('1.0000000000')),
(236236, 'GBP', Decimal('1.0000000000')),
(34634672, 'GBP', Decimal('1.0000000000')),
(2462346, 'GBP', Decimal('1.0000000000')),
(2356236, 'GBP', Decimal('1.0000000000'))]
<class 'pyodbc.Row'>
INSERT INTO commissionAmount (booking_id, currency, commission_amount) VALUES (%s, %s, %s)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
etc etc etc