Мне нужно перенести таблицы из MS Access в Postgres. Я хотел бы использовать pyodbc для этого, поскольку он позволяет мне подключаться к базе данных Access с помощью python и запрашивать данные.
У меня проблема в том, что я не совсем уверен, как программно создать таблицу с той же схемой, кроме простого создания оператора SQL с использованием форматирования строки. pyodbc предоставляет возможность перечислить все поля, типы полей и длины полей, поэтому я могу создать длинный оператор SQL со всей соответствующей информацией, однако как я могу сделать это для группы таблиц? нужно ли мне создавать операторы строки SQL для каждой таблицы?
import pyodbc
access_conn_str = (r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; 'r'DBQ=C:\Users\bob\access_database.accdb;')
access_conn = pyodbc.connect(access_conn_str)
access_cursor = access_conn.cursor()
postgres_conn_str = ("DRIVER={PostgreSQL Unicode};""DATABASE=access_database;""UID=user;""PWD=password;""SERVER=localhost;""PORT=5433;")
postgres_conn = pyodbc.connect(postgres_conn_str)
postgres_cursor = postgres_conn.cursor()
table_ditc = {}
row_dict = {}
for row in access_cursor.columns(table='table1'):
row_dict[row.column_name] = [row.type_name, row.column_size]
table_ditc['table1'] = row_dict
for table, values in table_ditc.items():
print(f"Creating table for {table}")
access_cursor.execute(f'SELECT * FROM {table}')
result = access_cursor.fetchall()
postgres_cursor.execute(f'''CREATE TABLE {table} (Do I just put a bunch of string formatting in here?);''')
postgres_cursor.executemany(f'INSERT INTO {table} (Do I just put a bunch of string formatting) VALUES (string formatting?)', result)
postgres_conn.commit()
Как видите, с помощью pyodbc я не совсем уверен, как создавать операторы SQL. Я знаю, что могу построить длинную строку вручную, но если бы я делал кучу разных таблиц с разными полями и т. д., это было бы нереалистично. Есть ли лучший и простой способ создать таблицу и вставить строки на основе схемы базы данных Access?