【问题标题】:flask db migrate do not change column settingflask db migrate 不更改列设置
【发布时间】:2021-08-30 12:37:30
【问题描述】:

我正在使用带有烧瓶迁移的 sql-alchemy。我用这样的东西设置了我的数据库类:

class Candidate(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32), index=False, unique=False)
    interviewer = db.Column(db.String(32), index=False, unique=False)

不幸的是,有些值太长了,所以我得到了错误:

sqlalchemy.exc.DataError: (psycopg2.errors.StringDataRightTruncation) 值对于类型字符变化 (32) 而言太长

不确定是哪一列的问题(实际的类要复杂得多)我这样改了类:

class Candidate(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), index=False, unique=False)
    interviewer = db.Column(db.String(64), index=False, unique=False)

然后跑:

flask db migrate
flask db upgrade

应用更改。不幸的是,我仍然收到同样的错误。我做错了什么?

【问题讨论】:

    标签: python flask sqlalchemy flask-migrate


    【解决方案1】:

    Alembic(Flask-Migrate 背后的迁移引擎)默认情况下不会将数据类型更改放入迁移中,因此您从 32 到 64 的更改可能会被忽略。您可以通过查看生成的迁移脚本来确认。

    要配置 Alembic 以监视列类型更改,您必须在创建 Migrate 类时添加 compare_type=True 选项:

    migrate = Migrate(app, db, compare_type=True)
    

    完成此操作后,重新生成迁移,它应该包含使列更大的代码。

    【讨论】:

      猜你喜欢
      • 2021-08-11
      • 1970-01-01
      • 2020-07-13
      • 2017-08-10
      • 2015-07-15
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      • 2020-09-26
      相关资源
      最近更新 更多