flask db migrate 不要更改列设置
flask db migrate do not change column setting
我正在使用 sql-alchemy 和 flask-migrate。我用这样的东西设置我的数据库 class:
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) 值对于类型字符 varying(32)
来说太长
不确定问题出在哪一列(实际 class 复杂得多)我将 class 更改为这样:
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
应用更改。不幸的是,我仍然收到同样的错误。我做错了什么?
Alembic(Flask-Migrate 背后的迁移引擎)默认情况下不会将数据类型更改放入迁移中,因此您从 32 到 64 的更改可能被忽略了。您可以通过查看生成的迁移脚本来确认。
要配置 Alembic 以监视列类型更改,您必须在创建 Migrate
class:
时添加 compare_type=True
选项
migrate = Migrate(app, db, compare_type=True)
执行此操作后,重新生成迁移,它应该包含使列变大的代码。
我正在使用 sql-alchemy 和 flask-migrate。我用这样的东西设置我的数据库 class:
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) 值对于类型字符 varying(32)
来说太长不确定问题出在哪一列(实际 class 复杂得多)我将 class 更改为这样:
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
应用更改。不幸的是,我仍然收到同样的错误。我做错了什么?
Alembic(Flask-Migrate 背后的迁移引擎)默认情况下不会将数据类型更改放入迁移中,因此您从 32 到 64 的更改可能被忽略了。您可以通过查看生成的迁移脚本来确认。
要配置 Alembic 以监视列类型更改,您必须在创建 Migrate
class:
compare_type=True
选项
migrate = Migrate(app, db, compare_type=True)
执行此操作后,重新生成迁移,它应该包含使列变大的代码。