首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Alembic迁移中使用现有的sqlalchemy Enum (Postgres)

如何在Alembic迁移中使用现有的sqlalchemy Enum (Postgres)
EN

Stack Overflow用户
提问于 2020-08-18 03:18:50
回答 4查看 3.4K关注 0票数 14

在过去的某个时候,我运行了一个alembic迁移,它创建了一个类似于.

代码语言:javascript
运行
复制
def upgrade():
    ...
    op.create_table(
        "users",
        sa.Column("id", sa.Integer(), autoincrement=True, nullable=False),
        ...
        sa.Column("type", sa.Enum("Foo", "Bar", "Baz", name="usertype"), nullable=False),
        ...
    )
    ...

...which会自动创建名为usertype的枚举,其值为"Foo", "Bar", "Baz"

现在,我想做一些其他的表,它也引用了同样的枚举。例如,

代码语言:javascript
运行
复制
def upgrade():
    ...
    op.create_table('foobar',
        sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
        ...
        sa.Column('user_type', sa.Enum(< ???????? >), nullable=False),
        ...
    )

引用现有的枚举的语法是什么?

我似乎在文档中找不到答案:https://docs.sqlalchemy.org/en/13/core/type_basics.html#sqlalchemy.types.Enum

EN

回答 4

Stack Overflow用户

发布于 2021-02-11 00:28:34

在Postgres中,有两个部分可以实现这一点。

create_type=False

  • Use

例:

代码语言:javascript
运行
复制
from sqlalchemy.dialects import postgresql

sa.Column('my_column', postgresql.ENUM(name='my_enum', create_type=False))
票数 17
EN

Stack Overflow用户

发布于 2022-09-23 09:12:29

您可能需要传递enum对象,而不是将其名称作为字符串。

代码语言:javascript
运行
复制
    entity = Column(
        postgresql.ENUM(
            SocialType,
            create_type=False,
            checkfirst=True,
            inherit_schema=True,
        )
    )

checkfirst=Truecreate_type=False不能被腺病毒检出。所以你需要手动添加它。最后,alembic迁移应该看起来像

代码语言:javascript
运行
复制
sa.Column('entity', postgresql.ENUM('github', 'twitter', name='socialtype', schema='dashboard', inherit_schema=True, create_type=False, checkfirst=True), nullable=True),
票数 2
EN

Stack Overflow用户

发布于 2022-09-27 01:50:52

对于此问题的简单、有效和后端不可知论的解决方案,please see my answer in another thread.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63461381

复制
相关文章

相似问题

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