【问题标题】:Django-rearart sequence of postgres id field with 0 instead of 1postgres id 字段的 Django-rearart 序列,带有 0 而不是 1
【发布时间】:2022-12-17 15:02:07
【问题描述】:

我想在 Django 应用程序中重置“postgresql”表的顺序以从“0”开始。

我的代码是:

视图.py

sequence_sql = connection.ops.sequence_reset_sql(no_style(), [ModelName])
with connection.cursor() as cursor:
      for sql in sequence_sql:
            cursor.execute(sql)
print("sequence reset")

序列重启成功;但有“1”。 我希望序列从 0 开始。

我怎样才能做到这一点?

【问题讨论】:

    标签: django database postgresql


    【解决方案1】:

    要在 Django 应用程序中重置 PostgreSQL 表的顺序,您可以使用 Django ORM 中的 RawSQL 方法来执行原始 SQL 语句。下面是一个示例,说明如何将名为 table_name 的表的序列重置为从 0 开始:

    from django.db import connection
    
    def reset_sequence(table_name):
        with connection.cursor() as cursor:
            cursor.execute(f"ALTER SEQUENCE {table_name}_id_seq RESTART WITH 1")
    

    这将执行 ALTER SEQUENCE 语句,这会将序列重置为从 1 开始。如果您希望序列从 0 开始,只需将 RESTART WITH 值更改为 0 即可。

    请注意,这仅在表的主键是序列列并且使用序列生成其值时才有效。如果主键不是序列列或没有使用序列,则此方法将不起作用。

    同样重要的是要注意,重置序列不会重置表中已有行的主键值。它只会影响在重置序列后插入到表中的新行的主键值。

    【讨论】:

      猜你喜欢
      • 2021-09-20
      • 2018-11-07
      • 2016-12-17
      • 1970-01-01
      • 1970-01-01
      • 2015-05-08
      • 2013-01-18
      • 2021-07-11
      • 1970-01-01
      相关资源
      最近更新 更多