首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django + PostgreSQL:如何重置主键?

Django + PostgreSQL:如何重置主键?
EN

Stack Overflow用户
提问于 2009-02-13 05:00:34
回答 6查看 14.3K关注 0票数 31

我一直在用Django开发一个应用程序。首先,为了简单起见,我一直使用sqlite3作为数据库。

然而,一旦我转移到PostgreSQL,我就遇到了一个小问题:一旦我清空一个表,主键就不能重置。

这个应用程序是一个游戏,是玩了很长一段时间(周)。因此,每次新游戏开始时,所有数据都会从数据库中清除,然后添加新的随机数据。

我希望每次清理/重新构建游戏时,都能从1开始使用主键“重新开始”。

代码仍然按原样工作,但整数是描述游戏中对象的一种非常自然的方式。我希望每个新游戏都从1开始,而不是从上一个游戏停止的地方开始。

如何在PostgreSQL中重置主键计数器?请记住,我不需要保留表中的数据,因为我无论如何都会将其清除。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-02-13 07:04:31

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

代码语言:javascript
运行
复制
python manage.py help sqlsequencereset

像这样通过管道将其输入psql以实际运行重置:

代码语言:javascript
运行
复制
python manage.py sqlsequencereset myapp1 myapp2 | psql

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

代码语言:javascript
运行
复制
BEGIN;
SELECT setval('"project_row_id_seq"', coalesce(max("id"), 1), max("id") IS NOT null) FROM "project_row";
COMMIT;
票数 38
EN

Stack Overflow用户

发布于 2018-05-10 23:20:57

正如"Van Gale“所建议的,您可以使用命令来解决运行sqlsequencereset时遇到的问题。

您可以通过以下方式在python内部执行sqlsequencereset生成的SQL查询(使用默认数据库):

代码语言:javascript
运行
复制
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.6Django2.0PostgreSQL 10测试了这段代码。

票数 18
EN

Stack Overflow用户

发布于 2011-12-21 03:44:59

如果执行原始sql,可以执行以下操作:

代码语言:javascript
运行
复制
ALTER SEQUENCE youApp_id_seq RESTART WITH 1;

文档:http://www.postgresql.org/docs/8.2/static/sql-altersequence.html

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/544791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档