使用下面所示的代码,我可以获得与SQLAlchemy泛型相对应的供应商类型。在这种情况下,它是"VARCHAR(10)“。如何在不创建表的情况下获得供应商类型?
engine = create_engine(DB_URL)
metadata_obj = MetaData()
table = Table('Table', metadata_obj,
Column('Column', types.String(10))
)
metadata_obj.create_all(bind=engine)
metadata_obj = MetaData()
metadata_obj.reflect(bind=engine)
print(metadata_obj.tables['Table'].columns[0].type)
发布于 2022-05-14 11:49:57
不能直接获得类型,但可以使用mock_engine作为字符串生成DDL,该字符串可以被解析。mock_engine必须与可调用的可调用耦合,该可调用可处理它生成的。
此片段基于来自SQLAlchemy 文档的示例代码。
import sqlalchemy as sa
tbl = sa.Table('drop_me', sa.MetaData(), sa.Column('col', sa.String(10)))
def dump(sql, *multiparams, **params):
print(sql.compile(dialect=engine.dialect))
mock_engine = sa.create_mock_engine('postgresql://', executor=dump)
tbl.create(mock_engine)
输出
CREATE TABLE "Table" (
"Column" VARCHAR(10)
)
也可以使用sqlalchemy.schema.CreateTable,但不推荐将其绑定到引擎,以便在SQLAlchemy 2.0中删除。
from sqlalchemy.schema import CreateTable
print(CreateTable(tbl, bind=some_engine)
https://stackoverflow.com/questions/72064270
复制相似问题