El comandosqlsequencereset de Django devuelve los comandos SQL necesarios para restablecer secuencias en la base de datos.
Otros comandos de administración similares ejecutan automáticamente el SQL de forma predeterminada (y solo imprimen el resultado si especifica la opción --dry-run).
Desde la línea de comandos puede ejecutar los comandos devueltos con:
python manage.py sqlsequencereset app1_name app2_name | python manage.py dbshell
Pero... ¿Hay alguna manera de ejecutar directamente el código devuelto desde sqlsequencereset
desde dentro de python?
Puede ejecutar la consulta SQL generada por sqlsequencereset
desde Python de esta manera ( usando la base de datos predeterminada ):
from django.core.management.color import no_style from django.db import connection from myapps.models import MyModel1, MyModel2 sequence_sql = connection.ops.sequence_reset_sql(no_style(), [MyModel1, MyModel2]) with connection.cursor() as cursor: for sql in sequence_sql: cursor.execute(sql)
Probé este código con Python3.6 , Django 2.0 y PostgreSQL 10 .
Actualmente estoy gestionando esto por:
Código:
import io from django.core.management import call_command from django.db import connection app_name = 'my_app' # Get SQL commands from sqlsequencereset output = io.StringIO() call_command('sqlsequencereset', app_name, stdout=output, no_color=True) sql = output.getvalue() with connection.cursor() as cursor: cursor.execute(sql) output.close()
también vea [this gist][1]
, donde se puede hacer, por ejemplo, desde la consola para todas las aplicaciones.
import os os.environ['DJANGO_COLORS'] = 'nocolor' from django.core.management import call_command from django.db import connection from django.apps import apps from io import StringIO commands = StringIO() cursor = connection.cursor() for app in apps.get_app_configs(): call_command('sqlsequencereset', app.label, stdout=commands) cursor.execute(commands.getvalue())