Django 1.8升级至1.11时sql_delete/sql_all导入失败,求移除时间及替代方案
Django 1.8→1.11升级:
sql_delete和sql_all导入失败的解决方案 我之前升级Django版本时也碰到过这个问题,给你详细梳理下:
移除版本说明
这两个函数其实在Django 1.9就已经被移除了,它们属于django.core.management.sql模块下的内部API,所以相关变更可能藏在发布说明的「内部API调整」板块里,容易被忽略。
替代方案
1. 替代sql_delete
如果需要手动生成删除模型数据的SQL语句,可以用DeleteQuery类的sql_delete方法:
from django.db.models.sql.query import DeleteQuery from your_app.models import YourModel # 实例化针对目标模型的DeleteQuery query = DeleteQuery(YourModel) # 获取SQL语句和对应的参数 sql_statement, params = query.sql_delete()
如果不需要手动拼接SQL,直接用ORM自带的删除方法会更简洁安全:
YourModel.objects.all().delete()
2. 替代sql_all
sql_all原本用来生成模型对应的建表、索引等全量SQL,现在可以结合sql_create和sql_indexes两个函数实现同等效果:
from django.core.management.sql import sql_create, sql_indexes from your_app.models import YourModel from django.db import connections # 获取默认数据库连接 db_connection = connections['default'] # 获取建表SQL create_table_sql = sql_create(YourModel, db_connection, style=None) # 获取索引相关SQL index_sql = sql_indexes(YourModel, db_connection, style=None) # 合并得到原sql_all的完整SQL集合 all_sql = create_table_sql + index_sql
内容的提问来源于stack exchange,提问作者Luis Sobrecueva
相关产品推荐
相关产品推荐

