如何解析在 DB 上使用 SQL 脚本生成的 ID (Django ORM)

Posted

技术标签:

【中文标题】如何解析在 DB 上使用 SQL 脚本生成的 ID (Django ORM)【英文标题】:How to resolve ID (Django ORM) that generates with SQL script on DB 【发布时间】:2017-03-27 12:25:55 【问题描述】:

Django ORM 无法解析在插入记录时使用特殊 SQL 触发器在 DB 中生成的 id。 当我保存没有 ID 的模型时,它会正确保存并在 DB 中有 ID?但是m.id 回复我None

class SomeModel(Model):
   id = IntegerField(primary_key=True)
   name = CharField(null=False, max=50)

m = SomeModel(name='asd')
m.save()
m.id # - None

保存后如何解析自动生成的 ID?或者我如何重写save() 方法?或者改变字段类型?

我需要使用自己的触发器而不是 IDENTITY

【问题讨论】:

为什么将id字段定义为IntegerField?事实上,你为什么要定义它,而不是让 Django 自动定义呢? @DanielRoseman 因为我需要知道 id 名称才能在迁移中使用它(添加触发器,生成 ID) 但是 Django 不知道你的触发器,所以它不知道该字段将由 db 填充。 @DanielRoseman 是的,我知道,我怎么能告诉 django 这件事? 【参考方案1】:

请阅读 Django 文档。默认情况下,你不需要告诉 Django 什么是主键。但如果你愿意的话。

class SomeModel(Model):
   id = models.AutoField(primary_key=True, db_index=True)
   name = CharField(null=False, max=50)

【讨论】:

AutoField 添加了 IDENTITY(1, 1),但我需要使用我的触发器来代替它。

以上是关于如何解析在 DB 上使用 SQL 脚本生成的 ID (Django ORM)的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 DB2 generate unique() 函数生成的 DB2 表中选择唯一 ID?

用于在表上自动生成 ID 的序列和触发 PL/SQL 脚本

我如何使用 CodeIgniter 执行 sql 脚本并将数据传递给它?

sql 收集旧服务器实例中的所有DB并生成还原脚本。我在移动数据库时使用了这个

informix上如何执行*.sql脚本

从 MySQL 数据库表生成 SQL 脚本