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