在过去的某个时候,我运行了一个alembic迁移,它创建了一个类似于.
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"
。
现在,我想做一些其他的表,它也引用了同样的枚举。例如,
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
发布于 2021-02-11 00:28:34
在Postgres中,有两个部分可以实现这一点。
create_type=False
sqlalchemy.dialects.postgresql.ENUM
(而不是sqlalchemy.Enum
) )例:
from sqlalchemy.dialects import postgresql
sa.Column('my_column', postgresql.ENUM(name='my_enum', create_type=False))
发布于 2022-09-23 09:12:29
您可能需要传递enum对象,而不是将其名称作为字符串。
entity = Column(
postgresql.ENUM(
SocialType,
create_type=False,
checkfirst=True,
inherit_schema=True,
)
)
checkfirst=True
和create_type=False
不能被腺病毒检出。所以你需要手动添加它。最后,alembic迁移应该看起来像
sa.Column('entity', postgresql.ENUM('github', 'twitter', name='socialtype', schema='dashboard', inherit_schema=True, create_type=False, checkfirst=True), nullable=True),
发布于 2022-09-27 01:50:52
对于此问题的简单、有效和后端不可知论的解决方案,please see my answer in another thread.
https://stackoverflow.com/questions/63461381
复制相似问题