【问题标题】:pymssql INSERT won't auto increment IDpymssql INSERT 不会自动增加 ID
【发布时间】:2017-10-12 09:43:32
【问题描述】:

我在我的 django 项目中使用 pymssql 来连接数据库。 我正在尝试使用 execute() 方法进行插入。
但是我收到此错误:

无法将值 NULL 插入到列“ID”、表 ITEMS

ID 列是主键,因此据我所知,它应该由 sql 本身填充。 这是我的插入命令:

    bill_id = execute("""
       INSERT INTO ITEMS(COlUMN1,COlUMN2, COlUMN3,COlUMN4,COlUMN5)
       VALUES (%d, %d, %d, %d, %d);
        """, (1713, 6, 929, 1184, 25))

并且这些 COLUMN 都不是 ID。 谁能告诉我做错了什么?

【问题讨论】:

  • 为什么不用Django模型与数据库交互?
  • @mhawke 我做不到。我正在做一个相当大的项目,这不是我的决定。
  • 如果表不是由 Django 创建的,那么 ID 字段可能没有设置AUTO_INCREMENT。您需要指定 id 或更改列以使其自动递增。
  • @Alasdair 谢谢。可能是这样。我将如何更改列?
  • 您需要运行适当的ALTER TABLE 语句。我不知道 MySQL 的确切语法。

标签: python sql sql-server django pymssql


【解决方案1】:

如果 id 列不是自增键列,它将不起作用。如果您在 SQL 中的 create table 语句中定义列,则它不会自动成为自动增量列。你必须定义它。也许您应该首先进行查询以获取 id 列的最大值。其次,您可以增加值并将主列添加到您的插入语句。

我发现这个链接使用 django 元数据 api。

https://docs.djangoproject.com/en/1.9/ref/models/meta/#migrating-from-the-old-api

【讨论】:

  • 谢谢,这就是我最终所做的,但我仍然无法弄清楚为什么 id 没有被 sql 设置。该列是自动递增的,因此它应该自行递增。
  • 好的,这是一个 MySQL 数据库。
  • 尝试以下显示表的结构。 dev.mysql.com/doc/refman/5.7/en/show-columns.html
  • 好的,你使用 MS-SQL Server。下面向您展示了显示表元数据的可能性。首先分析结构。如果您 100% 确定它是一个自动增量列。我不能说它有什么原因。 stackoverflow.com/questions/3930338/….
  • 感谢您的帮助。我很感激。我会尽快试试这个
猜你喜欢
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
  • 2016-10-08
  • 2012-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多