can you throw in the actual operations that fail in your test and I'll just run 
it ?  thanks.


On Mar 16, 2011, at 4:15 PM, Eric Ongerth wrote:

> I hope this makes sense, what I'm trying to do here.  My naive first
> try at it was to just see if I could have the desired backref()s on
> either the A or C class, and manage to have the relationship go
> through the associationproxy.  Probably I should be thinking of a
> technical reason why we would not expect that to work.  So then I
> thought maybe the backrefs just need to be on the relationships
> defined on the B class.  The above post was my third try, where I
> attempted to just make the whole setup symmetrical between A and C.
> 
> 
> On Mar 14, 4:44 pm, Eric Ongerth <ericonge...@gmail.com> wrote:
>> 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.
> 

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