使用Alembic通过SqlAlchemy创建双精度列

1 投票
1 回答
8872 浏览
提问于 2025-04-18 18:50

我需要在我的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 在自动生成迁移方面并不是完美的。最好先检查一下迁移脚本,并根据需要进行编辑。

撰写回答