【问题标题】:Flask-Migrate having issue with enum class in modelsFlask-Migrate 在模型中遇到枚举类问题
【发布时间】:2017-01-04 00:16:47
【问题描述】:

在我能够通过使用 flask-sqlalchemy 的 db.Enum 创建枚举之前使用 flask-migrate 并将值作为字符串输入。

reservation_status = db.Enum('pending', 'confirmed, name='reservation_status_enum')

我决定开始使用如下枚举类。根据sqlalchemy docs 工作正常。

class Status(enum.Enum):
    pending = 'pending'
    confirmed = 'confirmed'
    rejected = 'rejected'
    abandoned = 'abandoned'

reservation_status = db.Enum(Status, name='reservation_status_enum')

class Reservation(db.Model):
    __tablename__ = 'reservations'

    id = db.Column(db.Integer, primary_key=True)
    status = db.Column(reservation_status, default=Status.pending)
    ...

当我尝试使用 migrate 命令时,我在生成的代码中得到一个无效的语法错误,如下所示。错误正是写入文件的内容。

    sa.Column('status', sa.Enum(<enum 'Status'>, name='reservation_status_enum'), nullable=True),
                            ^
SyntaxError: invalid syntax

【问题讨论】:

  • 你使用的是哪个数据库?
  • 根据您的链接,SQLAlchemy 1.1 版中添加了对enum.Enum 的支持。 SQLAlchemy 的最新(非预发布)版本是 1.0.14。在 SQLAlchemy 1.1 发布之前,我不希望 Alembic 更新。
  • 你知道,我被代码包裹住了,我忘记了版本控制。这是有道理的。似乎现在我被字符串枚举困住了。谢谢@dim。我正在使用 sqlite 测试 danidee

标签: python flask enums sqlalchemy alembic


【解决方案1】:

感谢用户@dim,我能够通过将 sqlalchemy 升级到 beta 1.1.0b3 来解决这个问题。在大多数情况下,这是用户错误(我)。

我所做的只是

pip uninstall sqlalchemy
pip install sqlalchemy==1.1.0b3

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    • 2012-09-09
    • 1970-01-01
    相关资源
    最近更新 更多