gpt4 book ai didi

django - 使用 Django 和 Postgres 时获取 bigint id 字段?

转载 作者:行者123 更新时间:2023-11-29 12:57:40 31 4
gpt4 key购买 nike

Djangos ORM 为自动创建的 ID 列使用整数数据类型,但我需要它们是 bigint(使用 postgres 后端)。有办法做到这一点吗?

最佳答案

Django 1.10

使用新添加的BigAutoField

A 64-bit integer, much like an AutoField except that it is guaranteed to fit numbers from 1 to 9223372036854775807.

旧版本的 django

你需要像这样创建你的模型

class MyModel(models.Model):
id = models.BigIntegerField(primary_key=True)
name = models.CharField(max_length=100)

然后在 ./manage.py makemigrations 运行后,打开生成的迁移并将以下内容添加到操作列表中:

migrations.RunSQL("CREATE SEQUENCE myapp_seq"),
migrations.RunSQL("ALTER TABLE myapp_mymodel ALTER COLUMN id SET DEFAULT NEXTVAL('myapp_seq')");

更新

Daniel Roseman 提出了一个有效观点在评论中。在 postgreql 中,以下查询有效

INSERT INTO myapp_mymodel(name) values('some name');

但下面不是因为主键不为空

INSERT INTO myapp_mymodel(id, name) values(null,'some name');

不幸的是,它是 django 通过的第二种形式的查询。这仍然可以通过一些工作来解决。

def save(self, *args, **kwargs):
if not self.id :
cursor = connection.cursor();
cursor.execute("SELECT NEXTVAL('myapp_seq')")
id = cursor.fetchone()
self.id = id[0]

Model(MyModel,self).save(*args, **kwargs)

关于django - 使用 Django 和 Postgres 时获取 bigint id 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38966145/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com