Django迁移。如何检查表是否存在迁移?

米哈尔金(Gikoriy Mikhalkin)

我目前正在开发基于Django 1.8和Postgres的应用程序。这个应用程序安装在几种环境中,在其中一些环境中,我需要从DB中删除旧表。

我用以下SQL查询编写了迁移:

IF EXISTS (
    SELECT relname FROM pg_class WHERE relname=tablename
) THEN 
    DELETE FROM tablename END IF;

但是Django在此查询中引发错误:

django.db.utils.ProgrammingError: syntax error at or near "IF" 

我能以某种方式检查,迁移,该表存在,然后才执行查询,像DROP FROM tablename

米哈尔金(Gikoriy Mikhalkin)

使用解决了django.db.connection码:

from django.db import migrations
from django.db import connection


class Migration(migrations.Migration):
    db_cursor = connection.cursor()
    check_exists_query = "SELECT relname FROM pg_class WHERE relname=%s;"
    base_query = "DELETE FROM {table} WHERE condition;"
    tables = [tables]
    existing_tables = []

    for table in tables:
        db_cursor.execute(check_exists_query, [table])
        result = db_cursor.fetchone()
        if result:
            existing_tables.append(table)

    operations = [
        migrations.RunSQL(base_query.format(table=existing_table)) for existing_table in existing_tables
    ]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章