【问题标题】:Flask SQL Alchemy try perform SET operation, when it is not neededFlask SQLAlchemy 在不需要时尝试执行 SET 操作
【发布时间】:2021-11-06 20:32:59
【问题描述】:

我在使用 SQL Alchemy 时遇到了一个非常奇怪的问题。我在 SQL 服务器中有一个表,用于存储销售额,格式如下:

CREATE TABLE Resale (
  [address] VARCHAR(100) NOT NULL,
  [id] BIGINT NOT NULL,
  [price] INT NOT NULL,
  [start_date] DATETIME2(7) NOT NULL  DEFAULT GETUTCDATE(),
  [sys_start_time] DATETIME2 (7) GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
  [sys_end_time] DATETIME2 (7) GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
  PERIOD FOR SYSTEM_TIME ([sys_start_time], [sys_end_time]),
  CONSTRAINT [PK_ReSale] PRIMARY KEY CLUSTERED ([id] ASC))
  WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE=[dbo].[ResaleHistory], DATA_CONSISTENCY_CHECK=ON));

在 python 中,我使用了 flask-sqlalchemy 并构建了这个模型:

class Resale(db.Model):
    __tablename__ = 'Resale'
    address = db.Column(db.String(100), nullable=False)
    id = db.Column(db.BigInteger, primary_key=True)
    price = db.Column(db.Integer, nullable=False)
    start_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow())

现在我只是想在这个表中插入一条记录:

resale = Resale(address=address, id=id, price=price)
db.session.add(resale)
db.session.commit()

和烧瓶返回:

pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Table 'Resale' does not have the identity property. Cannot perform SET operation. (8106) (SQLExecDirectW)")
[SQL: SET IDENTITY_INSERT [Resale] ON]

我真的不明白为什么我有这个,我没有在我的表中使用自动增量,所以我的烧瓶要我做“SET IDENTITY_INSERT Resale ON?

老实说,我完全迷失了这条消息,我只是想在数据库中添加一条记录

【问题讨论】:

    标签: python flask sql-server-2005 flask-sqlalchemy sql-insert


    【解决方案1】:

    正如this answer for a previous similiar question 中所述,您应该考虑在您的“id”上将标志“autoincrement”设置为 False。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 2013-04-29
      • 1970-01-01
      • 2021-04-11
      相关资源
      最近更新 更多