we do have a self-referential example using ActiveMapper: http://www.sqlalchemy.org/trac/browser/sqlalchemy/trunk/test/ext/ activemapper.py#L223
i think the problem you have is that youre putting "comment_id", which is the name of a table column, as the backref name. it should be the name of a relationship that will give you the parent Comment object, such as "parent_comment". On Jul 30, 2006, at 2:41 PM, Graham Higgins wrote: > Hi, > > I've encountered a couple of instances of a specific SQL design > pattern, aimed at mimicking a linked list (of comments and sub- > comments to blog entries) and I'd just like to check that the pattern > is known not to be supported in ActiveMapper. > > Michael Bayer describes the pattern as "handling a hierarchical > relationship on itself", and in his implementation, "contains a lazy > reference both to its parent comment and its list of child comments." > > 1st instance is reflog's Turboblog, uses SQLObject and handles the > mapping explicitly: > > class Comment(SQLObject): > class sqlmeta: > table = "turboblog_comment" > [...] > parent_id = IntCol(default=-1) > sub_comments = RelatedJoin("Comment",joinColumn="parent_id") > > 2nd instance is Michael Bayer's zblog, uses SQLAlchemy, mapping is > handled via foreign_key: > > comments = Table('comments', metadata, > Column('comment_id', Integer, primary_key=True), > [...] > Column('parent_comment_id', Integer, ForeignKey > ('comments.comment_id')), > ) > > augmented with: > > # comment mapper. This mapper is handling a hierarchical > relationship on itself, and contains > # a lazy reference both to its parent comment and its list of child > comments. > mapper(Comment, tables.comments, properties={ > 'id':tables.comments.c.comment_id, > 'post':relation(Post, lazy=True, backref=backref('comments', > cascade="all, delete-orphan")), > 'user':relation(user.User, lazy=False, backref=backref > ('comments', cascade="all, delete-orphan")), > 'parent':relation(Comment, > primaryjoin=tables.comments.c.parent_comment_id==tables.comments.c.com > me > nt_id, foreignkey=tables.comments.c.comment_id, lazy=True, > uselist=False), > > I've tried both approaches in ActiveMapper, neither of which seem to > work (but I'm a newbie w.r.t sqlalchemy): > > class Comment(ActiveMapper): > class mapping: > __table__= "comment" > comment_id = column(Integer, primary_key=True) > [...] > parent_id = column(Integer, default=-1) > sub_comments = one_to_many("Comment", colname="parent_id", > backref="comment_id") > > ArgumentError: Cant find any foreign key relationships between > 'comment' and 'comment' > > class Comment(ActiveMapper): > class mapping: > __table__= "comment" > comment_id = column(Integer, primary_key=True) > [...] > parent_id = column(Integer, > foreign_key="comment.comment_id", index=True) > sub_comments = one_to_many("Comment", colname="parent_id", > backref="comment_id") > > AttributeError: 'ColumnProperty' object has no attribute > '_get_target_class' > > I'm thinking that this design pattern may be outside the intentions > of ActiveMapper --- Michael Bayer has already indicated that > "ActiveMapper is just giving you a thin layer of "shortcut" on top of > things". > > (It's not that it can't be done with an explicit Table+mapper, it's > just that I'm lazy and prefer to work at the highest level of > abstraction available if possible.) > > Cheers, > > Graham Higgins. > > > > > > ---------------------------------------------------------------------- > --- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to > share your > opinions on IT & business topics through brief surveys -- and earn > cash > http://www.techsay.com/default.php? > page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > Sqlalchemy-users mailing list > Sqlalchemy-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ Sqlalchemy-users mailing list Sqlalchemy-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users