Hi Everybody,

New to the forum.

I'm having a problem setting up a relation.  In this hypothetical
example, I have a tree with one parent having many children, and each
child having many attributes.  I want to create a relation where each
Parent has a list of all attributes that any of it's children have.

This relation works fine using 0.3.4, but breaks with the following
error with 0.3.7 when I try to instantiate a Parent object:

sqlalchemy.exceptions.ArgumentError: Cant locate any foreign key
columns in primary join condition 'attribute.child_id = child.id AND
child.parent_id = parent.id' for relationship 'Parent.attributes
(Attribute)'.  Specify 'foreign_keys' argument to indicate which
columns in the join condition are foreign.

I tried adding various foreign_keys attributes without much luck; I'm
guessing I just don't know what I'm doing...

Here is the example:

----------------------------------------------------------------------------------
from sqlalchemy import *

metadata = BoundMetaData("sqlite:///relation.db")
metadata.engine.echo = True
session = create_session(bind_to = metadata.engine)

parent_table = Table('parent', metadata,
    Column('id', Integer, primary_key=True),
)

child_table = Table('child', metadata,
    Column('id', Integer, primary_key=True),
    Column('parent_id', Integer, ForeignKey('parent.id')),
)

attribute_table = Table('attribute', metadata,
    Column('id', Integer, primary_key=True),
    Column('child_id', Integer, ForeignKey('child.id')),
)

class Parent(object):
    pass

class Child(object):
    pass

class Attribute(object):
    pass

parent_mapper = mapper(
    Parent,
    parent_table,
    properties = dict(
        children = relation(Child, backref='parent'),
        attributes = relation(Attribute,
            primaryjoin = and_(attribute_table.c.child_id ==
child_table.c.id, child_table.c.parent_id == parent_table.c.id),
            backref = 'parent',
        )
    )
)

child_mapper = mapper(
    Child,
    child_table,
)

attribute_mapper = mapper(
    Attribute,
    attribute_table,
    properties = dict(
        child = relation(Child, backref=backref('attributes')),
    )
)

metadata.create_all()

p = Parent()

----------------------------------------------------------------------------------

Any ideas?

Thanks!

-Patrick


--~--~---------~--~----~------------~-------~--~----~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to