Hi Michael, thanks for the prompt reply.

However, When I tried according to the suggestion, I get this error:

    45    class Groups(ModelBase, VersionColumnMixin):
    46        domain_id = sa.Column(sa.String(36), 
DefaultClause('default'), nullable=False)
    47        description = sa.Column(sa.Text)
    48        date_created = sa.Column(sa.DateTime)
    49        group_name = sa.Column(sa.String(64), nullable=False, 
index=True)
    50        child_groups = relationship('Groups', 
secondary=groups_and_groups_assoc_table,
    51                                      primaryjoin=
*"Groups.id==groups_and_groups_assoc_table.c.parent_group_id"*,
    52                                      secondaryjoin=
*"Groups.id==groups_and_groups_assoc_table.c.child_group_id"*,
    53                                      backref='parent_groups')
    54        __table_args__ = (sa.UniqueConstraint('domain_id', 
'group_name'),)

Traceback (most recent call last):
  File "./selfref4.py", line 67, in <module>
    g1 = Groups(description='1234', group_name='group1')
  File "<string>", line 2, in __init__
  File 
"/usr/lib64/python2.6/site-packages/sqlalchemy/orm/instrumentation.py", 
line 322, in _new_state_if_none
    state = self._state_constructor(instance, self)
  File "/usr/lib64/python2.6/site-packages/sqlalchemy/util/langhelpers.py", 
line 689, in __get__
    obj.__dict__[self.__name__] = result = self.fget(obj)
...
...File 
"/usr/lib64/python2.6/site-packages/sqlalchemy/ext/declarative/clsregistry.py", 
line 275, in __call__
    (self.prop.parent, self.arg, n.args[0], self.cls)
*sqlalchemy.exc.InvalidRequestError:* When initializing mapper 
Mapper|Groups|groups, expression 
'Groups.id==groups_and_groups_assoc_table.c.parent_group_id' failed to 
locate a name ("name 'groups_and_groups_assoc_table' is not defined"). If 
this is a class name, consider adding this relationship() to the <class 
'__main__.Groups'> class after both dependent classes have been defined.




On Tuesday, March 11, 2014 2:10:52 PM UTC-7, Michael Bayer wrote:
>
>
> On Mar 11, 2014, at 3:50 PM, Bala <bal...@gmail.com <javascript:>> wrote:
>
>     45    class Groups(ModelBase, VersionColumnMixin):
>     46        *id = sa.Column('id', sa.Integer, Sequence('id_seq'), 
> primary_key=True)*
>     47        domain_id = sa.Column(sa.String(36), 
> DefaultClause('default'), nullable=False)
>     48        description = sa.Column(sa.Text)
>     49        date_created = sa.Column(sa.DateTime)
>     50        group_name = sa.Column(sa.String(64), nullable=False, 
> index=True)
>     51        child_groups = relationship('Groups', 
> secondary=groups_and_groups_assoc_table,
>     52                                      
> primaryjoin=id==groups_and_groups_assoc_table.c.parent_group_id,
>     53                                      
> secondaryjoin=id==groups_and_groups_assoc_table.c.child_group_id,
>     54                                      backref='parent_groups’)
>
>
> here, when the definition of the Python identifier “id” within the Groups 
> class definition is removed, it is no longer valid to refer to the word 
> “id” within the “primaryjoin” and “secondaryjoin” conditions, as “id” is 
> not defined.  The reason it seems to be defined is that it is resolving to 
> the Python built in function “id”.  Unfortunately the exception message 
> isn’t being too smart here, interpreting “id” as just another literal value 
> like the number “3” so you don’t see it, it wouldn’t be a bad idea for SQLA 
> to detect this kind of thing but that is actually somewhat difficult as it 
> is valid for an expression to refer to a callable.
>
> Since “id” is not yet defined within the class body of Groups you need to 
> specify conditions using a string:
>
> class Groups(ModelBase, VersionColumnMixin):
>     domain_id = sa.Column(sa.String(36), DefaultClause('default'), 
> nullable=False)
>     description = sa.Column(sa.Text)
>     date_created = sa.Column(sa.DateTime)
>     group_name = sa.Column(sa.String(64), nullable=False, index=True)
>     child_groups = relationship('Groups', 
> secondary=groups_and_groups_assoc_table,
>                                   
> primaryjoin="Groups.id==groups_and_groups.c.parent_group_id",
>                                   
> secondaryjoin="Groups.id==groups_and_groups.c.child_group_id",
>                                   backref='parent_groups')
>     __table_args__ = (sa.UniqueConstraint('domain_id', 'group_name'),)
>
>
> i’m updating the document at 
> http://docs.sqlalchemy.org/en/rel_0_9/orm/relationships.html#self-referential-many-to-many-relationshipto
>  include this form now.
>
>
>
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to