我一直在研究Django中的应用程序.首先,为简单起见,我一直在使用sqlite3作为数据库.
但是,一旦我转移到PostgreSQL,我遇到了一个问题:一旦我清除了表,主键就不会重置.
这个应用程序是一个长时间(几周)播放的游戏.因此,每次新游戏开始时,所有数据都将从数据库中清除,然后添加新的随机数据.
我希望能够在1
每次清理/重建游戏时从主键开始"重新开始" .
代码仍然按原样运行,但整数是描述游戏中对象的一种非常自然的方式.我想让每场新游戏从1开始,而不是在最后一场比赛停止的地方.
如何在PostgreSQL中重置主键计数器?请记住,我不需要保存表格中的数据,因为无论如何我都要擦除它.
在你的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;
如“ 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.6,Django 2.0和PostgreSQL 10测试了此代码。