Article has two company. 'management_company' and 'intermediate_company' So I wrote code like below.
<code> class Company(Base): __tablename__ = 'companies' id = Column(Integer, primary_key=True) name = Column(String(255)) class Article(Base): __tablename__ = 'articles' id = Column(Integer, primary_key=True) name = Column(String(255)) management_company_id = Column(Integer, ForeignKey ('companies.id')) intermediate_company_id = Column(Integer, ForeignKey ('companies.id')) management_company = relation('Company', backref='management_articles', primaryjoin='(Article.management_company_id==Company.id)') intermediate_company = relation('Company', backref='intermediate_articles', primaryjoin='(Article.intermediate_company_id==Company.id)') </code> However, This code doesn't work with a code below. <code> management = Company(name='A') intermediate = Company(name='B') session.add(management) session.add(intermediate) session.commit() article = Article(name='C') article.management_company = management article.intermediate_company = intermediate session.add(article) session.commit() </code> And The Error message was: Traceback (most recent call last): File "/Users/alisue/Documents/workspaces/aptana/selling.iyeiye/ sellingiyeiye/tests/model/articles/test_article.py", line 29, in tearDown meta.Session.delete(self.intermediate_company) File "/Library/Python/2.5/site-packages/SQLAlchemy-0.5.5-py2.5.egg/ sqlalchemy/orm/scoping.py", line 123, in do return getattr(self.registry(), name)(*args, **kwargs) File "/Library/Python/2.5/site-packages/SQLAlchemy-0.5.5-py2.5.egg/ sqlalchemy/orm/session.py", line 1134, in delete cascade_states = list(_cascade_state_iterator('delete', state)) File "/Library/Python/2.5/site-packages/SQLAlchemy-0.5.5-py2.5.egg/ sqlalchemy/orm/session.py", line 1556, in _cascade_state_iterator for (o, m) in mapper.cascade_iterator(cascade, state, **kwargs): File "/Library/Python/2.5/site-packages/SQLAlchemy-0.5.5-py2.5.egg/ sqlalchemy/orm/mapper.py", line 1169, in cascade_iterator instance, instance_mapper, corresponding_state = iterator.next() File "/Library/Python/2.5/site-packages/SQLAlchemy-0.5.5-py2.5.egg/ sqlalchemy/orm/properties.py", line 684, in cascade_iterator instances = state.value_as_iterable(self.key, passive=passive) File "/Library/Python/2.5/site-packages/SQLAlchemy-0.5.5-py2.5.egg/ sqlalchemy/orm/state.py", line 110, in value_as_iterable x = impl.get(self, dict_, passive=passive) File "/Library/Python/2.5/site-packages/SQLAlchemy-0.5.5-py2.5.egg/ sqlalchemy/orm/attributes.py", line 374, in get value = callable_() File "/Library/Python/2.5/site-packages/SQLAlchemy-0.5.5-py2.5.egg/ sqlalchemy/orm/strategies.py", line 568, in __call__ result = q.all() File "/Library/Python/2.5/site-packages/SQLAlchemy-0.5.5-py2.5.egg/ sqlalchemy/orm/query.py", line 1198, in all return list(self) File "/Library/Python/2.5/site-packages/SQLAlchemy-0.5.5-py2.5.egg/ sqlalchemy/orm/query.py", line 1291, in __iter__ self.session._autoflush() File "/Library/Python/2.5/site-packages/SQLAlchemy-0.5.5-py2.5.egg/ sqlalchemy/orm/session.py", line 899, in _autoflush self.flush() File "/Library/Python/2.5/site-packages/SQLAlchemy-0.5.5-py2.5.egg/ sqlalchemy/orm/session.py", line 1354, in flush self._flush(objects) File "/Library/Python/2.5/site-packages/SQLAlchemy-0.5.5-py2.5.egg/ sqlalchemy/orm/session.py", line 1432, in _flush flush_context.execute() File "/Library/Python/2.5/site-packages/SQLAlchemy-0.5.5-py2.5.egg/ sqlalchemy/orm/unitofwork.py", line 257, in execute UOWExecutor().execute(self, tasks) File "/Library/Python/2.5/site-packages/SQLAlchemy-0.5.5-py2.5.egg/ sqlalchemy/orm/unitofwork.py", line 720, in execute self.execute_save_steps(trans, task) File "/Library/Python/2.5/site-packages/SQLAlchemy-0.5.5-py2.5.egg/ sqlalchemy/orm/unitofwork.py", line 735, in execute_save_steps self.save_objects(trans, task) File "/Library/Python/2.5/site-packages/SQLAlchemy-0.5.5-py2.5.egg/ sqlalchemy/orm/unitofwork.py", line 726, in save_objects task.mapper._save_obj(task.polymorphic_tosave_objects, trans) File "/Library/Python/2.5/site-packages/SQLAlchemy-0.5.5-py2.5.egg/ sqlalchemy/orm/mapper.py", line 1376, in _save_obj c = connection.execute(statement.values(value_params), params) File "/Library/Python/2.5/site-packages/SQLAlchemy-0.5.5-py2.5.egg/ sqlalchemy/engine/base.py", line 824, in execute return Connection.executors[c](self, object, multiparams, params) File "/Library/Python/2.5/site-packages/SQLAlchemy-0.5.5-py2.5.egg/ sqlalchemy/engine/base.py", line 874, in _execute_clauseelement return self.__execute_context(context) File "/Library/Python/2.5/site-packages/SQLAlchemy-0.5.5-py2.5.egg/ sqlalchemy/engine/base.py", line 896, in __execute_context self._cursor_execute(context.cursor, context.statement, context.parameters[0], context=context) File "/Library/Python/2.5/site-packages/SQLAlchemy-0.5.5-py2.5.egg/ sqlalchemy/engine/base.py", line 950, in _cursor_execute self._handle_dbapi_exception(e, statement, parameters, cursor, context) File "/Library/Python/2.5/site-packages/SQLAlchemy-0.5.5-py2.5.egg/ sqlalchemy/engine/base.py", line 931, in _handle_dbapi_exception raise exc.DBAPIError.instance(statement, parameters, e, connection_invalidated=is_disconnect) IntegrityError: (IntegrityError) articles.management_company_id may not be NULL u'UPDATE articles SET modified=?, management_company_id=? WHERE articles.id = ?' ['2009-08-20 11:39:05.781449', None, 1] What was wrong on my code? Any help? please. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---