Невозможно создать логическое поле MySQL с помощью flask-sqlalchemy и flask-migrate - PullRequest
0 голосов
/ 31 октября 2018

У меня есть работающее колба с несколькими моделями. Модель 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 не видит изменений в модели.

Есть ли способ создать логическое поле в mysql, используя flask-migrate и flask-sqlalchemy?

1 Ответ

0 голосов
/ 03 ноября 2018

Попробуйте ниже, я предполагаю, что Flask перенос не распознает db.Column(BOOLEAN, default=0).

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

Я только что проверил его, и выше работает, и Flask-Migrate смог его обнаружить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...