使用Alembic通过SqlAlchemy创建双精度列
我需要在我的MYSQL数据库中使用一个DOUBLE类型的列。我看过文档,上面建议我使用精度为64的Float类型。不过,这似乎不太管用。我最后得到的还是一个普通的float列,所需的精度并不存在。
我还尝试过:
from sqlalchemy.dialects.mysql import DOUBLE #and in the model:
item = db.Column(DOUBLE())
但是,在迁移的时候,Flask-Migrate似乎无法区分之前的列和新的列,结果生成了一个空的迁移文件。
我看过这个帖子:在Flask-SQLAlchemy中,Alembic自动生成迁移时没有检测到变化和https://github.com/miguelgrinberg/Flask-Migrate/issues/24
我还尝试在alembic的设置中把compare_type=True,但Float和Double类型之间仍然没有注册到任何区别。
我知道我可以手动在数据库中切换列,但我该如何通过sqlalchemy强制使用双精度列呢?
1 个回答
2
在 EnvironmentContext
上设置 compare_type=True
应该是可以的(对我来说确实有效)。如果你在自动生成迁移时仍然遇到问题,你可以手动把这个操作加到迁移里。
def upgrade():
#...
op.alter_column('my_table', 'my_column', type_=DOUBLE, existing_nullable=False)
#...
总的来说,Alembic 在自动生成迁移方面并不是完美的。最好先检查一下迁移脚本,并根据需要进行编辑。