我想创建一个函数,将方言特定的DB类型映射到通用的sqlalchemy DB类型
例如: 我试图从OracleDB表中获取数据类型,然后使用接收到的元数据在MySql数据库(或其他数据库)中创建一个表。 我得到了方言特定的列类型
下面是创建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列类型(字符串、整数等),而不是特定于方言的列类型
通过this pull request添加到SQLAlchemy 1.4的
.as_generic()
方法可以在方言级别处理SQLAlchemy本身定义的Oracle类型…但它不适用于驱动程序级别的类型,除非驱动程序本身实现它:
因此,除非cx Oracle实现这样一种方法(值得怀疑),否则您可能需要使用自己的函数来实现:
相关问题 更多 >
编程相关推荐