当前位置:  开发笔记 > 编程语言 > 正文

Django + PostgreSQL:如何重置主键?

如何解决《Django+PostgreSQL:如何重置主键?》经验,为你挑选了2个好方法。

我一直在研究Django中的应用程序.首先,为简单起见,我一直在使用sqlite3作为数据库.

但是,一旦我转移到PostgreSQL,我遇到了一个问题:一旦我清除了表,主键就不会重置.

这个应用程序是一个长时间(几周)播放的游戏.因此,每次新游戏开始时,所有数据都将从数据库中清除,然后添加新的随机数据.

我希望能够在1每次清理/重建游戏时从主键开始"重新开始" .

代码仍然按原样运行,但整数是描述游戏中对象的一种非常自然的方式.我想让每场新游戏从1开始,而不是在最后一场比赛停止的地方.

如何在PostgreSQL中重置主键计数器?请记住,我不需要保存表格中的数据,因为无论如何我都要擦除它.



1> Van Gale..:

在你的app目录中试试这个:

python manage.py help sqlsequencereset

像这样将它传输到psql中以实际运行重置:

python manage.py sqlsequencereset myapp1 myapp2 | psql

编辑:这是我的一个表上此命令的输出示例:

BEGIN;
SELECT setval('"project_row_id_seq"', coalesce(max("id"), 1), max("id") IS NOT null) FROM "project_row";
COMMIT;



2> Paolo Melchi..:

如“ Van Gale”所建议,您可以获取命令来解决运行中的问题sqlsequencereset

要么

您可以通过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)

我使用Python3.6Django 2.0PostgreSQL 10测试了此代码。

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有