Я хочу создать функцию, которая сопоставляет специфичные для диалекта типы БД с общими типами БД sqlalchemy.
Например: я пытаюсь получить типы данных из таблицы OracleDB, а затем создать таблицу в MySql DB (или другой), используя полученные метаданные. Я получаю типы столбцов, зависящие от диалекта.
Вот минимальный код для создания таблицы OracleDB:
create table test_test(id int, num_int number(10), num_float number(10,4), dt date, ts timestamp, str varchar2(100), fl float);
insert into test_test(id) values(1);
Чтобы получить типы столбцов таблицы БД
from pprint import pprint
from sqlalchemy import sessionmaker, create_engine
engine = create_engine(...)
session = sessionmaker()
session.configure(bind=engine)
session = session()
res = session.execute('select * from test_test where 1 = 2')
columns = res.cursor.description
pprint(columns)
Выход
[('ID', <cx_Oracle.DbType DB_TYPE_NUMBER>, 39, None, 38, 0, 1),
('NUM_INT', <cx_Oracle.DbType DB_TYPE_NUMBER>, 11, None, 10, 0, 1),
('NUM_FLOAT', <cx_Oracle.DbType DB_TYPE_NUMBER>, 16, None, 10, 4, 1),
('DT', <cx_Oracle.DbType DB_TYPE_DATE>, 23, None, None, None, 1),
('TS', <cx_Oracle.DbType DB_TYPE_TIMESTAMP>, 23, None, 0, 6, 1),
('STR', <cx_Oracle.DbType DB_TYPE_VARCHAR>, 100, 100, None, None, 1),
('FL', <cx_Oracle.DbType DB_TYPE_NUMBER>, 127, None, 126, -127, 1)]
Как я могу получить общие типы столбцов sqlalchemy (String, Integer и т. д.) вместо специфичных для диалекта?
cx_Oracle.DbType.DB_TYPE_VARCHAR
- person MaxU   schedule 01.01.2021.as_generic()
, откройте выпуск на GitHub. - person Gord Thompson   schedule 01.01.2021