无法使用 Python SQLAlchemy 在 SQL 服务器 table 中插入一行(PK 未设置为 IDENTITY)

Unable to insert a row in SQL Server table using Python SQLAlchemy (PK not set as IDENTITY)

拥有此 Python Flask SQL从第三方 SQL 服务器数据库获取数据的 Alchemy 应用程序。 有一个 table 我需要插入行的列:

TABLE [dbo].[TableName](
    [Id] [bigint] NOT NULL,
    [Desc] [varchar](150) NOT NULL,
 CONSTRAINT [PK_Id] PRIMARY KEY CLUSTERED ...

主键未设置为IDENTITY

使用 SQLAlchemy ORM,如果我尝试添加一个没有 Id 字段明确值的新行,我会遇到此错误:

sqlalchemy.exc.IntegrityError: (pyodbc.IntegrityError) ('23000', "[23000] ... The column not allow Null values* (translated text)

如果我显式指定一个 Id 值,则会发生另一个错误:

sqlalchemy.exc.ProgrammingError: (pyodbc.ProgrammingError) ('42000', '[42000] ...* It is not possible to find the object "dbo.TableName", because it not exists or you don't have permissions (translated text)

这个错误后面跟着一句:

[SQL: SET IDENTITY_INSERT dbo.[TableName] ON]

我假设 SQLAlchemy 正在尝试执行此命令,但由于 Id 未设置为 IDENTITY,因此没有必要这样做。

使用 SQL Server Management Studio,使用相同的 pyodbc 连接用户,我可以插入新记录,为 Id 选择任何值。

如有任何提示,我将不胜感激。

您的 INSERT 将失败,因为值 必须 为 table 的主键列定义,或者在您的 [=10= 中显式定义] 或隐含地通过 IDENTITY 属性.

这个要求是由于主键的性质决定的,不能被破坏。此外,您无法插入 NULL,因为 table 定义明确禁止在该列中使用 NULL。

由于存在设计因素的组合,您必须在 INSERT 声明中明确提供一个值。

根据文档 (https://docs-sqlalchemy.readthedocs.io/ko/latest/dialects/mssql.html#:~:text=The%20SQLAlchemy%20dialect%20will%20detect%20when%20an%20INSERT,OFF%20subsequent%20to%20the%20execution.%20Given%20this%20example%3A),SqlAlchemy 似乎假设该列是 IDENTITY 并试图将 IDENTITY_INSERT 切换为开。由于它不是标识列,因此遇到异常。

在您的 table 元数据中,检查您是否为 Id 列设置了 autoincrement=False

编辑添加:根据对相关问题 () 的回答中的评论,SqlAlchemy 似乎假定所有整数值主键都是同一性的,并且自动递增 - 这意味着您需要按照此处所述显式覆盖该假设。