Django迁移。如何检查表是否存在于迁移中?
问题描述:
我目前正在构建基于Django 1.8和Postgres的应用程序。这个应用程序安装在几个环境中,其中一些在DB中的旧表,我需要从中删除记录。Django迁移。如何检查表是否存在于迁移中?
我写的迁移与下面的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
?
答
使用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
]
这将清空所有的表。所以这引发了问题,为什么不删除数据库呢? – e4c5
同意,不是最有用的例子。用WHERE条件更新删除查询 – Greesha0