2016-08-27 38 views
2

在我能够通过使用flask-sqlalchemy的db.Enum创建枚举并在像as这样的字符串中输入值之前使用flask-migrate。Flask-Migrate在模型中存在enum类的问题

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 
+0

? – danidee

+0

根据您的链接,对enum.Enum的支持已添加到版本1.1中的SQLAlchemy。最近的(非预发行版)SQLAlchemy版本是1.0.14。我不希望Alembic在SQLAlchemy 1.1发布之后才会更新。 – dirn

+0

你知道,我被包装在我忘记版本的代码中。这是有道理的。看起来像现在我坚持字符串枚举。谢谢@dim。我正在使用sqlite测试danidee –

回答

1

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

我所做的就是

您正在使用哪个数据库
pip uninstall sqlalchemy 
pip install sqlalchemy==1.1.0b3