SQLAlchemy:具有来自会话的多态关系的Merge()对象失败

时间:2013-09-12 01:17:56

标签: python testing sqlalchemy polymorphism

我目前正在我的应用程序中编写测试,它使用了SQLAlchemy。

tasks属于plans。但是taskstype表的外键上是多态的。请参阅:How can I set Polymorphic Identity after a class is defined?

基本上,根据Type的外键,Task可以是TaskA对象或TaskB对象,这两个对象都来自Task和默认情况下,实例是Task(附加了自己的type)。

在我的测试BaseTestCas中,我在setUp初始化会话(并在tearDown中关闭)。

当我尝试:

self.task.plan = self.plan
self.session.add_all([self.plan, self.task])
self.task = self.session.merge(self.task)

我收到以下错误:

/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py:154: SAWarning: Flushing object <Task at 0x5b93150> with incompatible polymorphic identity '58dbb417-1cb3-47c8-8bb4-5a7e2fe34498'; the object may not refresh and/or load correctly mapper._validate_polymorphic_identity(mapper, state, dict_)

后面有错误说明

IntegrityError: (IntegrityError) null value in column "plan_id" violates not-null constraint

即使我正确分配了plan

任何帮助将不胜感激。

(我不确定其他哪些信息对此很重要。)

0 个答案:

没有答案