2011-03-29 2 views
1

나는 Elixir을 사용하여 MSSQL 데이터베이스에 연결하고 있습니다. 데이터베이스에는 계산 된 열이있는 테이블이 있습니다. 그러나 개체의 다른 열을 업데이트하고 변경 내용을 커밋하면 Python에서 계산 열에 삽입 할 수 없다고 알려줍니다.Elixir를 사용하여 db에 쓸 때 계산 된 필드를 남기는 방법 session.commit()

나는 자동로드를 내 모델 있도록 사용하고 있습니다 :

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() 

중요 정보를! 계산 된 필드이기 때문에 ss 개체에 EndDateTime에 대한 값을 제공하지 않습니다. 그렇게 효과적으로, 나는 그 분야의 데이터베이스에 아무것도 돌려 보내지 않을 것이다.

오류 :

sqlalchemy.exc.ProgrammingError: (ProgrammingError) ('42000', '[42000] [FreeTDS][SQL Server]The column "EndDateTime" cannot be modified because it is either a computed column or is the result of a UNION operator. (271) (SQLPrepare)') 'INSERT INTO sch.[tbScheduleSlots] ([Program_ID], [SlotType_ID], [StartDateTime], [EndDateTime], [Duration], [Description], [Notes], [State], [MasterSlot_ID]) OUTPUT inserted.[ID_ScheduleSlot] VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)' (5130, 1, '2012-01-01 13:00:00:000', None, None, None, None, 2, None)

+0

훨씬 더 많은 정보가 필요합니다! 어떻게 테이블 클래스를 정의합니까? 열을 어떻게 업데이트합니까? 어떤 오류 메시지가 나타 납니까? 적어도 일부 코드 스 니펫이 필요합니다. – seb

+0

네 말이 맞아. 미안. 잘하면 내 편집이 더 좋다 – MFB

+0

계산 된 필드 또는 특정 필드를 이름별로 무시하도록하는 옵션이 있는지 궁금합니다. – HardCode

답변

0

Ehhh, 나는 파이썬 프로그래머 모르겠지만,이 줄 것으로 보인다 : 자동로드를 사용

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

아마 어떤이 INSERT에 [EndDateTime]을 추가입니다 성명서 (오류 메시지에 표시된대로). 파이썬에게 기본 테이블의 메타 데이터 (즉, 테이블의 필드)를 알려주는 라인 인 것 같습니다. 수동으로 업데이트 할 열을 정의하는 방법을 찾아보십시오. INSERT를 빌드하기 위해 Python을 사용하면 기본 쿼리에 [EndDateTime]이 자동으로 포함됩니다.

+0

당신은이 테이블 자동로드를하기에는 너무 많은 것을 기대하고 있습니다. 이 테이블을 수동으로 정의 해 보겠습니다. 감사! – MFB

관련 문제