Python Flask Migrate:Alembic将选项转换为255
我正在使用sqlalchemy_utils向数据库中添加一个“选项”字段。在我使用Flask migrate运行迁移后,它将我的所有选择转换为255,下面是一个简化的示例:Python Flask Migrate:Alembic将选项转换为255,python,flask,flask-sqlalchemy,alembic,flask-migrate,Python,Flask,Flask Sqlalchemy,Alembic,Flask Migrate,我正在使用sqlalchemy_utils向数据库中添加一个“选项”字段。在我使用Flask migrate运行迁移后,它将我的所有选择转换为255,下面是一个简化的示例: # models.py from sqlalchemy_utils.types.choice import ChoiceType class Stuff(db.Model): type = db.Column(ChoiceType(Stuff_types)) 运行manage.py migrate后,迁移文件如下
# models.py
from sqlalchemy_utils.types.choice import ChoiceType
class Stuff(db.Model):
type = db.Column(ChoiceType(Stuff_types))
运行manage.py migrate
后,迁移文件如下所示:
# /migrations/versions/1234migrate.py
import sqlalchemy_utils
def upgrade():
sa.Column('type', sqlalchemy_utils.types.choice.ChoiceType(length=255), nullable=False),
我手动将那些length=255
更改为正确的类型(在本例中是stuff\u-types
),并且成功了。我想知道我是否没有正确设置alemic来使用sqlalchemy_utils。或者我不知道有没有更好的解决方案
谢谢大家 你说的“正确类型”是什么意思?为什么长度不应该是255?@dirn例如,选择的元组,如('stuff1','Stuff One'),('stuff2','Stuff Two'),所有这些都可以放入255个字符的字段中。你遇到的确切问题是什么?运行迁移时是否出现错误?您在字段中插入时出错了吗?@dirn是的,出现了错误,因为此字段被假定为
ChoiceField
,而不是StringField
,并且length=255
参数用于StringField
。数据库并不总是有一个可以处理选项的字段(例如枚举)。SQLAlchemy将值存储在基于字符串的字段中。除非由于Alembic使用了StringField
,您会遇到异常,否则您的模型应该按照您的预期工作。