Невозможно создать логическое поле MySQL с помощью 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 не может видеть изменения в модели.

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

2 ответа

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

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

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

Вы можете сделать это так

      from sqlalchemy import Boolean, Column

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

это должно работать с MySQL.

Другие вопросы по тегам