postgresql – 使用SQLAlchemy和Alembic检查数据库中是否存在表
发布时间:2020-12-13 16:30:01 所属栏目:百科 来源:网络整理
导读:我正在使用Alembic作为迁移工具,我在已更新的数据库上启动以下伪脚本(没有Alembic的修订条目,数据库模式只是最新的). revision = '1067fd2d11c8'down_revision = Nonefrom alembic import opimport sqlalchemy as sadef upgrade(): op.add_column('box',sa.C
我正在使用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不会阻止你这样做,它不太方便. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |