postgresql – 使用SQLAlchemy和Alembic检查数据库中是否存在表列

前端之家收集整理的这篇文章主要介绍了postgresql – 使用SQLAlchemy和Alembic检查数据库中是否存在表列前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用Alembic作为迁移工具,我在已更新的数据库上启动以下伪脚本(没有Alembic的修订条目,数据库模式只是最新的).
revision = '1067fd2d11c8'
down_revision = None

from alembic import op
import sqlalchemy as sa


def upgrade():
    op.add_column('Box',sa.Column('has_data',sa.Boolean,server_default='0'))


def downgrade():
    pass

只有Postgresql背后才会出现以下错误(对MysqL来说一切都很好):

INFO  [alembic.migration] Context impl PostgresqlImpl.
INFO  [alembic.migration] Will assume transactional DDL.
INFO  [root] (ProgrammingError) ERREUR:  la colonne « has_data » de la relation « Box » existe déjà

最后一行表示列has_data已存在.

我想在op.add_column之前检查列是否存在.

最简单的答案是不要试图这样做.相反,使您的Alembic迁移代表数据库的完整布局.然后,您所做的任何迁移都将基于对现有数据库的更改.

要在已有数据库的情况下进行初始迁移,请暂时指向空数据库并运行alembic revision –autogenerate -m“base”.然后,回到实际数据库并运行alembic戳头,说明数据库的当前状态由最新的迁移表示,而不实际运行它.

如果由于某种原因不想这样做,您可以选择不使用–autogenerate,而是生成用您想要的操作填写的空修订. Alembic不会阻止你这样做,它不太方便.

猜你在找的Postgre SQL相关文章