首页 > 解决方案 > 从 sqlalchemy 模型中获取 SQL 数据类型

问题描述

我正在尝试为使用 sqlalchemy 创建的数据库生成文档,并希望包含依赖于当前引擎的列 SQL 数据类型。有没有办法从 sqlalchemy 中提取这个?我试着跟着metadata.create_all(engine)兔子洞走,但很快就迷路了。

基本上我所追求的是一个映射:

{
    'Integer': 'INT',
    'String': 'VARCHAR',
    ...
}

它特定于当前引擎,并将 sqlalchemy 类型转换为 SQL 数据类型。

标签: pythonsqlalchemy

解决方案


您可以创建/使用方言实例及其类型编译器:

In [18]: engine = create_engine('postgresql://sdf:sdf@localhost/sdf')

In [19]: types.Unicode().compile(dialect=engine.dialect)
Out[19]: 'VARCHAR'

请注意,您也可以Dialect在没有引擎的情况下创建相关的子类实例:

In [20]: from sqlalchemy.dialects import mssql

In [21]: d = mssql.dialect()

In [22]: types.Unicode(32).compile(dialect=d)
Out[22]: 'NVARCHAR(32)'

推荐阅读