1

我正在使用 Elixir 连接到 MSSQL 数据库。数据库有一个表,其中有一个计算列。但是,当我更新对象中的其他列并提交更改时,python 告诉我我无法插入计算列。

我在我的模型中使用自动加载:

class Slot(Entity):
    using_options(tablename='tbScheduleSlots', autoload=True)
    using_table_options(schema='sch')

我创建了一个 Slot 并给它一些值然后提交:

ss = Slot(StartDateTime='2012-01-01 13:00:00:000', Program_ID=1234, etc)
session.commit()

重要的提示!!我没有为 ss 对象提供 EndDateTime 的任何值,因为那是一个计算字段。如此有效,我没有将任何内容传回该字段的数据库。

错误:

sqlalchemy.exc.ProgrammingError: (ProgrammingError) ('42000', '[42000] [FreeTDS][SQL Server]无法修改列“EndDateTime”,因为它要么是计算列,要么是 UNION 运算符的结果。( 271) (SQLPrepare)') 'INSERT INTO sch.[tbScheduleSlots] ([Program_ID], [SlotType_ID], [StartDateTime], [EndDateTime], [Duration], [Description], [Notes], [State], [MasterSlot_ID ]) 输出插入。[ID_ScheduleSlot] 值 (?, ?, ?, ?, ?, ?, ?, ?, ?)' (5130, 1, '2012-01-01 13:00:00:000', None , 无, 无, 无, 2, 无)

4

1 回答 1

0

嗯,我不是 Python 程序员,但似乎这一行:

using_options(tablename='tbScheduleSlots', autoload=True)

使用自动加载的可能是添加[EndDateTime]到 INSERT 语句的内容(如您的错误消息中所示)。看起来那是告诉 Python 基础表的元数据(即表中的字段)的行。寻找一种方法来定义要手动更新的列。依靠 Python 构建 INSERT 似乎会自动包含[EndDateTime]在基础查询中。

于 2011-03-29T17:50:32.070 回答