无法使用flask-sqlalchemy和flask-migrate

时间:2018-10-31 01:51:21

标签: mysql python-3.x flask-sqlalchemy flask-migrate

我有一个型号不多的烧瓶应用程序。 User模型如下...

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(128), index=True, unique=True)
    password_hash = db.Column(db.String(128))
    first_name = db.Column(db.String(32))
    last_name = db.Column(db.String(32))
    bio = db.Column(db.String(255))
    patterns = db.relationship('Pattern', backref='user', lazy='dynamic')

现在,我想向模型添加一个新的布尔列。我正在使用MySQL作为数据库。我尝试了以下方法...

invited = db.Column(db.Boolean, default=0)

但是当我flask db migrate失败时,我得到以下信息...

INFO  [alembic.runtime.migration] Context impl MySQLImpl.

我也尝试过

from sqlalchemy import BOOLEAN # also with Boolean
...
invited = db.Column(BOOLEAN, default=0) # also with Boolean

但得到相同的错误。阅读MySQL文档后发现MySQL没有布尔类型而是TINYINT。但是阅读此Github线程后,我了解到布尔类将根据方言变成TINYINT。所以我做了以下...

from sqlalchemy.dialect.mysql import BOOLEAN

,当flask run migrate时仍然出现相同的错误。似乎Alembic无法看到模型中的更改。

是否可以使用mysqlflask-migrateflask-sqlalchemy中创建布尔字段?

2 个答案:

答案 0 :(得分:0)

尝试以下操作,我假设Flask迁移无法识别db.Column(BOOLEAN, default=0)

a_boolean_field = db.Column(db.Boolean(), default=False)

我刚刚对其进行了测试,并且经过以上测试,Flask-Migrate能够检测到它。

答案 1 :(得分:0)

你可以这样做

from sqlalchemy import Boolean, Column

invited = Column(Boolean, nullable=False, default=False)

这应该适用于 MySQL。