1

Elixir を使用して MSSQL データベースに接続しています。データベースには、計算列を含むテーブルがあります。ただし、オブジェクト内の他の列を更新して変更をコミットすると、計算列に挿入できないことが python から通知されます。

私はオートロードを使用しているので、私のモデルでは:

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

スロットを作成し、いくつかの値を指定してからコミットします。

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

重要な注意点!!EndDateTime は計算フィールドであるため、ss オブジェクトには値を与えません。事実上、そのフィールドのデータベースには何も返していません。

エラー:

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] ]) OUTPUT が挿入されました。 、なし、なし、なし、2、なし)

4

1 に答える 1

0

ええと、私は Python プログラマーではありませんが、次の行のようです。

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

自動ロードを使用しているのは、おそらく[EndDateTime]INSERT ステートメントに追加されているものです (エラー メッセージに示されているように)。これは、基になるテーブル (テーブル内のフィールド) のメタデータを Python に伝える行のようです。手動で更新する列を定義する方法を探してください。Python に依存して INSERT を構築すると[EndDateTime]、基になるクエリに自動的に含まれるように見えます。

于 2011-03-29T17:50:32.070 に答える