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不会阻止你这样做,它不太方便.

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...