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 [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---