you need it on 'parent' also

On Sep 5, 2006, at 12:55 PM, Nick Joyce wrote:

> I had specified the foriegnkeys for previous/next_sibling to
> node_table.c.id, but it appeared to make no difference, so I removed
> them in case is was casing a problem.
>
> Setting these relations to your suggestion still fires the same error.
>
> Michael Bayer wrote:
>> your relationships are not being set up correctly, since you haven't
>> specified a "foreignkey" parameter on any of them.  note that the
>> "root" relationship in the documentation example has a "foreignkey"
>> set on it.
>>
>> when you say:
>>
>>> node_table.c.parent_id==node_table.c.id
>>
>> the "foreignkey" is automatically going to be "parent_id".  but for
>> half of those relationships, you want the "foreignkey" to be "id".
>> the actual ordering of the columns in the comparison is not  
>> significant.
>>
>>
>> On Sep 5, 2006, at 10:12 AM, Nick Joyce wrote:
>>
>>> I am attempting to extend the self referential example in the docs
>>> http://www.sqlalchemy.org/docs/index.myt?
>>> paged=no#advdatamapping_circular
>>> by adding properties 'prev_sibling' and 'next_sibling'. (See  
>>> attached
>>> script)
>>>
>>> When run, the following exception is raised:
>>>
>>> Traceback (most recent call last):
>>>   File "tree.py", line 79, in ?
>>>     session.flush()
>>>   File "build/bdist.linux-i686/egg/sqlalchemy/orm/session.py", line
>>> 234,
>>> in flush
>>>   File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py",  
>>> line
>>> 197, in flush
>>>   File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py",  
>>> line
>>> 359, in execute
>>>   File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py",  
>>> line
>>> 407, in _sort_dependencies
>>>   File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py",  
>>> line
>>> 395, in sort_hier
>>>   File "build/bdist.linux-i686/egg/sqlalchemy/orm/unitofwork.py",  
>>> line
>>> 800, in _sort_circular_dependencies
>>>   File "build/bdist.linux-i686/egg/sqlalchemy/orm/topological.py",
>>> line
>>> 139, in sort
>>> sqlalchemy.exceptions.FlushError: Circular dependency detected
>>> {<Node(path=first)>  (idself=1079711436): {<Node(path=second)>
>>> (idself=1079711468): True, <Node(path=root)>  (idself=1079711404):
>>> True}, <Node(path=root)>  (idself=1079711404): {<Node(path=second)>
>>> (idself=1079711468): True, <Node(path=first)>  (idself=1079711436):
>>> True}, <Node(path=second)>  (idself=1079711468): {<Node(path=first)>
>>> (idself=1079711436): True, <Node(path=root)>  (idself=1079711404):
>>> True}}[]
>>>
>>> I am doing something wrong? If so can someone point me in the right
>>> direction ...
>>>
>>> Thanks,
>>>
>>> Nick
>>> import sqlalchemy.mods.threadlocal
>>> from sqlalchemy import *
>>>
>>> engine = create_engine('sqlite:///:memory:', echo=True);
>>> metadata = BoundMetaData(engine)
>>>
>>> node_table = Table('node', metadata,
>>>     Column('id', Integer, primary_key=True),
>>>     Column('path', String(50), nullable=False),
>>>     Column('parent_id', Integer, ForeignKey('node.id'),
>>> nullable=True),
>>>     Column('prev_sibling_id', Integer, ForeignKey('node.id'),
>>> nullable=True),
>>>     Column('next_sibling_id', Integer, ForeignKey('node.id'),
>>> nullable=True)
>>> )
>>>
>>> class Node(object):
>>>     def __init__(self, path=''):
>>>         self.path = path
>>>
>>>     def has_child_nodes(self):
>>>         return len(self.children) == 0
>>>
>>>     def append_child(self, child):
>>>         try:
>>>             lc = self.children[len(self.children) - 1]
>>>         except IndexError, e:
>>>             lc = None
>>>
>>>         self.children.append(child)
>>>
>>>         child.parent = self
>>>
>>>         if lc is not None:
>>>             lc.next_sibling = child
>>>             child.previous_sibling = lc
>>>
>>>     def __repr__(self):
>>>         return '<Node(path=%s)>' % self.path
>>>
>>> n_mapper = mapper(Node, node_table, properties={
>>>     'parent': relation(
>>>         Node,
>>>         lazy=True,
>>>         primaryjoin=node_table.c.parent_id==node_table.c.id,
>>>         uselist=False
>>>     ),
>>>     'children': relation(
>>>         Node,
>>>         primaryjoin=node_table.c.id==node_table.c.parent_id,
>>>         lazy=True,
>>>         cascade="all, delete-orphan"
>>>     ),
>>>     'previous_sibling': relation(
>>>         Node,
>>>         primaryjoin=node_table.c.prev_sibling_id==node_table.c.id,
>>>         lazy=True,
>>>         uselist=False
>>>     ),
>>>     'next_sibling': relation(
>>>         Node,
>>>         primaryjoin=node_table.c.next_sibling_id==node_table.c.id,
>>>         lazy=True,
>>>         uselist=False
>>>     )
>>> })
>>>
>>> if __name__ == '__main__':
>>>     node_table.create()
>>>
>>>     root = Node('root')
>>>     first = Node('first')
>>>     second = Node('second')
>>>
>>>     root.append_child(first)
>>>     root.append_child(second)
>>>
>>>     print first==second.previous_sibling
>>>
>>>     session = objectstore.session
>>>
>>>     session.flush()
>>> -------------------------------------------------------------------- 
>>> --
>>> ---
>>> Using Tomcat but need to do more? Need to support web services,
>>> security?
>>> Get stuff done quickly with pre-integrated technology to make your
>>> job easier
>>> Download IBM WebSphere Application Server v.1.0.1 based on Apache
>>> Geronimo
>>> http://sel.as-us.falkag.net/sel?
>>> cmd=lnk&kid=120709&bid=263057&dat=121642____________________________ 
>>> __
>>> _________________
>>> Sqlalchemy-users mailing list
>>> Sqlalchemy-users@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users
>>
>>
>> --------------------------------------------------------------------- 
>> ----
>> Using Tomcat but need to do more? Need to support web services,  
>> security?
>> Get stuff done quickly with pre-integrated technology to make your  
>> job easier
>> Download IBM WebSphere Application Server v.1.0.1 based on Apache  
>> Geronimo
>> http://sel.as-us.falkag.net/sel? 
>> cmd=lnk&kid=120709&bid=263057&dat=121642
>
>
> ---------------------------------------------------------------------- 
> ---
> Using Tomcat but need to do more? Need to support web services,  
> security?
> Get stuff done quickly with pre-integrated technology to make your  
> job easier
> Download IBM WebSphere Application Server v.1.0.1 based on Apache  
> Geronimo
> http://sel.as-us.falkag.net/sel? 
> cmd=lnk&kid=120709&bid=263057&dat=121642
> _______________________________________________
> Sqlalchemy-users mailing list
> Sqlalchemy-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Sqlalchemy-users mailing list
Sqlalchemy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users

Reply via email to