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
-~----------~----~----~----~------~----~------~--~---

Reply via email to