from sqlalchemy import Unicode, Integer, Column, create_engine,
ForeignKey
from sqlalchemy.orm import relationship, Session
from sqlalchemy.orm.collections import MappedCollection
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.ext.associationproxy import association_proxy
import operator

class Base(object):
    id = Column(Integer, primary_key=True)

Base = declarative_base(cls=Base)

def _create_c_by_value(value):
    return C(value)

def _create_a_by_value(value):
    return A(value)

class A(Base):
    __tablename__ = "a"
    id = Column(Integer, primary_key=True)
    value = Column(Unicode)
    associations = relationship("B", cascade="all")
    c_values = association_proxy("associations", "c_val",
creator=_create_c_by_value)

    def __init__(self, val):
        self.value = val

    def __repr__(self):
        return('<A>(%s)' % self.value)

class B(Base):
    __tablename__ = "b"
    a_id = Column(Integer, ForeignKey("a.id"), nullable=False)
    c_id = Column(Integer, ForeignKey("c.id"), nullable=False)
    c_elements = relationship("C", cascade="all")
    c_val = association_proxy("c_elements", "value")
    a_elements = relationship("A", cascade="all")
    a_val = association_proxy("a_elements", "value")


class C(Base):
    __tablename__ = "c"
    id = Column(Integer, primary_key=True)
    c_value = Column(Unicode)
    associations = relationship("B", cascade="all")
    a_values = association_proxy("associations", "a_val",
creator=_create_a_by_value)

    def __init__(self, val):
        self.value = val

    def __repr__(self):
        return('<C>(%s)' % self.value)


if __name__ == "__main__":

    engine = create_engine('sqlite://', echo=True)
    Base.metadata.create_all(engine)
    session = Session(engine)



Ok, running this sets up an example environment then you can
experiment.  Try creating some As and relating them to some Cs.  I'm
getting a bunch of different errors doing this.  What am I doing wrong
or overlooking?

The core of my inquiry is this: would this be the way to make two-way
relationships between two classes (two classes which have a many:many
relationship between them) work correctly when tunneled through an
associationproxy to hide the association object class between them?

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