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