OOps. Doesn't matter. It's all my fault. I used Unittest and I delete management_company on tearDown. (duaring management_company_id set nullable=False)
I set 'cascade="all"' and everything goes Correct. Sorry. On 8月20日, 午前11:41, Alisue <hello.goodbye.by.beat...@gmail.com> wrote: > 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 -~----------~----~----~----~------~----~------~--~---