首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在不创建表的情况下获得SQLAlchemy泛型的供应商类型?

如何在不创建表的情况下获得SQLAlchemy泛型的供应商类型?
EN

Stack Overflow用户
提问于 2022-04-29 22:32:28
回答 1查看 37关注 0票数 1

使用下面所示的代码,我可以获得与SQLAlchemy泛型相对应的供应商类型。在这种情况下,它是"VARCHAR(10)“。如何在不创建表的情况下获得供应商类型?

代码语言:javascript
运行
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2022-05-14 11:49:57

不能直接获得类型,但可以使用mock_engine作为字符串生成DDL,该字符串可以被解析。mock_engine必须与可调用的可调用耦合,该可调用可处理它生成的。

此片段基于来自SQLAlchemy 文档的示例代码。

代码语言:javascript
运行
复制
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)

输出

代码语言:javascript
运行
复制
CREATE TABLE "Table" (
        "Column" VARCHAR(10)
)

也可以使用sqlalchemy.schema.CreateTable,但不推荐将其绑定到引擎,以便在SQLAlchemy 2.0中删除。

代码语言:javascript
运行
复制
from sqlalchemy.schema import CreateTable

print(CreateTable(tbl, bind=some_engine)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72064270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档