Django的sqlsequencereset命令返回重置数据库中的序列所需的SQL命令。
默认情况下,其他类似的管理命令会自动执行SQL(并且只有指定--dry-run选项时,才打印输出)。
在命令行中,您可以使用以下命令执行返回的命令:
python manage.py sqlsequencereset app1_name app2_name | python manage.py dbshell
Run Code Online (Sandbox Code Playgroud)
但是...有没有办法sqlsequencereset从python内部直接执行返回的代码?
我目前通过以下方式管理:
代码:
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()
Run Code Online (Sandbox Code Playgroud)
您可以通过sqlsequencereset以下方式执行python内部生成的SQL查询(使用默认数据库):
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)
Run Code Online (Sandbox Code Playgroud)
我使用Python3.6,Django 2.0和PostgreSQL 10测试了此代码。