【发布时间】:2021-04-02 07:16:09
【问题描述】:
我想创建一个函数,将特定方言的数据库类型映射到通用 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 列类型(字符串、整数等)而不是特定方言的列类型?
【问题讨论】:
-
@GordThompson,不幸的是,here 提供的解决方案不适用于驱动程序特定的数据类型,例如
cx_Oracle.DbType.DB_TYPE_VARCHAR -
@MaxU re:“不适用于特定于驱动程序的数据类型” - 如果您认为这是 SQLAlchemy 实现
.as_generic()的缺陷,请打开 issue on GitHub。跨度> -
@GordThompson,好的,我们会在赏金到期后尝试打开一个新的 GitHib 问题...
标签: python types sqlalchemy orm metadata