g'day,

i wanted to give the adjacency pattern  a try in the context of a dog
pedigree database and used
http://groups.google.com/group/sqlalchemy/browse_thread/thread/d78357121da8014a/537377ff73bdede7?lnk=gst&q=family+tree#537377ff73bdede7
as a reference.
the requirement at hand is to be abe to go back, say, 4-5 generations
but i don't seem to be able to change the mapper to successively yield
parents. here's a bit of code to illustrate.

persons = Table("persons", meta,
    Column("person_id", Integer, primary_key=True),
    Column("name", Unicode(40), nullable=False),
    Column("mother_id", Integer, ForeignKey("persons.person_id")),
    Column("father_id", Integer, ForeignKey("persons.person_id"))
)


class Person(object):pass


mapper(Person, persons, properties={
    'mom': relation(Person,
primaryjoin=persons.c.mother_id==persons.c.person_id,\
                    backref='children_m', lazy=False, join_depth=4),
    'dad': relation(Person,
primaryjoin=persons.c.father_id==persons.c.person_id,\
                    backref='children_f', lazy=False, join_depth=4)
})

#meta.drop_all()
meta.create_all()

session = Session()

gd_1= Person()
gd_1.name =u'grand dad 1'
session.add(gd_1)
session.commit()

gm_1 = Person()
gm_1.name =u'grand ma 1'
session.add(gm_1)
session.commit()

gd_2 = Person()
gd_2.name =u'grand dad 2'
session.add(gd_2)
session.commit()

gm_2 = Person()
gm_2.name =u'grand ma 2'
session.add(gm_2)
session.commit()

d_1 = Person()
d_1.name =u'dad'
d_1.mother_id = gm_1.person_id
d_1.father_id = gd_1.person_id
session.add(d_1)
session.commit()

m_1 = Person()
m_1.name =u'mom'
m_1.mother_id = gm_2.person_id
m_1.father_id = gd_2.person_id
session.add(m_1)
session.commit()

c = Person()
c.name = u'child'
c.mother_id = m_1.person_id
c.father_id = d_1.person_id
session.add(c)
session.commit()

r = session.query(Person).filter(Person.name==u'child').one()
print u'name :', r.name
print u'mother, father id :', r.mother_id, r.father_id
print u'mother, father obj :', r.mom, r.dad
print u'backref children _m, _f :', r.children_m, r.children_f
print

r = session.query(Person).filter(Person.dad.contains(d_1)).one()
print u'name :', r.name
print u'mother, father id :', r.mother_id, r.father_id
print u'mother, father obj :', r.mom, r.dad[0].name
print u'backref children _m, _f :', r.children_m, r.children_f[0].name

session.close()

as you can see, the current mapper yields the children, if any, (and
only on the paternal side. i'd greatly appreciate insights to a) get
the list of parents and b) to get both maternal and paternal
references.

thx


--~--~---------~--~----~------------~-------~--~----~
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