Django为什么不重置SQLite3中的序列?

Sco*_*tes 5 python sqlite django postgresql

为什么Django允许您重置postgres和其他DBMS上的序列(AutoID)字段,但不能重置SQLite3?

在中查看sql_flush方法的源代码django/db/backends/sqlite3/base.py,其中有一条注释:

注意:不需要重置自动递增的索引(请参见其他sql_flush()实现)。此时只需返回SQL

我有一些测试,我在其中加载依赖于绝对主键ID的Fixture文件。由于Django不会为SQLite重置自动ID字段,因此这些固定装置无法正确加载。

在sqlite中重置auto id列似乎有些琐碎:如何在sqlite中重置自动递增序列号

Igo*_*kiy 0

也许这个片段会有所帮助:

import os

from django.core.management import call_command
from django.db import connection
from django.utils.six import StringIO


def reset_sequences(app_name):
    os.environ['DJANGO_COLORS'] = 'nocolor'
    buf = StringIO()
    call_command('sqlsequencereset', app_name, stdout=buf)
    buf.seek(0)

    sql = "".join(buf.readlines())

    with connection.cursor() as cursor:
        cursor.execute(sql)

    print("Sequences for app '{}' reset".format(app_name))
Run Code Online (Sandbox Code Playgroud)