You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中无法向无Identity字段的MS SQL Server表插入数据

问题原因及解决方法

这个问题不是ODBC驱动适配问题,核心是Django的SQL Server后端默认主键策略导致的:它默认假设模型主键对应数据库的Identity自增字段,插入时会尝试执行SET IDENTITY_INSERT相关操作,而你的表没有Identity属性,因此触发报错。

具体解决步骤

  • 修正模型定义:将主键字段从默认的AutoField改为IntegerField,明确指定primary_key=True,同时映射到数据库的ID字段:
from django.db import models

class BaseTest(models.Model):
    id = models.IntegerField(primary_key=True, db_column='ID')
    name = models.CharField(max_length=100, db_column='name')

    class Meta:
        db_table = 'base_test'
  • 手动指定ID插入:因为表没有自动生成ID的机制,插入数据时必须显式提供ID值:
BaseTest.objects.create(id=1, name="测试数据")
  • 后端配置检查:如果使用django-mssql-backend或django-pyodbc-azure作为SQL Server后端,确保数据库配置中没有强制开启Identity相关的自动处理(多数情况下默认配置即可,只要模型定义正确)。

验证方式

修改模型后,重新生成迁移文件(如果需要)并执行,再尝试插入带ID的记录,即可正常写入数据。

内容的提问来源于stack exchange,提问作者Federico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 20:06:24