python - flask db migrate 不更改列设置
问题描述
我正在使用带有烧瓶迁移的 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
应用更改。不幸的是,我仍然收到同样的错误。我究竟做错了什么?
解决方案
Alembic(Flask-Migrate 背后的迁移引擎)默认情况下不会将数据类型更改放入迁移中,因此您从 32 到 64 的更改可能会被忽略。您可以通过查看生成的迁移脚本来确认。
要配置 Alembic 以监视列类型更改,您必须在compare_type=True
创建Migrate
类时添加选项:
migrate = Migrate(app, db, compare_type=True)
完成此操作后,重新生成迁移,它应该具有使列更大的代码。
推荐阅读
- javascript - 需要找出数组的平均值
- wildfly - Wildfly 8.1 与 Openjdk 的兼容性
- sql-server - 是否有一个简单的脚本来“复制/克隆”同一台服务器上的 SQL Server 数据库?
- ms-access - 识别缺少时间的日期时间戳
- java - 将数组值从 JPA/Hibernate 传递给 PostgreSQL
- c# - 有没有办法通过传入类型的字符串值来编写 FindElement 调用
- ios - 在运行时在 Unity 中请求 iOS 上的相机权限
- r - 如何根据其他数据框中的信息减去 R 数据框列?
- java - WireMock 超时
- bash - 配置 Kubernetes 以从私有注册表中提取图像时出错