加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读