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