Am Mittwoch, den 27.09.2006, 13:39 -0400 schrieb Michael Bayer:
> first off, note that this style of relationship is severely limited
> with regards to the arrangements of A->B->C. the C's attached to B's
> are intertwined with the B's that are attached to A's and it will be
> very confusing to manage those relationships independently of each
> other. if you are looking for select efficiency, you would probably
> be better off just doing normal joins from A->B->C including
> association tables if they are many-to-many relationships; SA can
> eager load such a relationship in one query.
Ok, I hope that helps out. because now I found out, that there is -
based on given data - not really a need to have an entry in B, an A can
have a C without an B, thats because People may not want to tell us B
but only C.
> anyway, the closest SA can get to this is to represent your "R" table
> as a relationship object with its own mapper:
>
> class ABCRelation(object):pass
>
> mapper(A, Atable)
> mapper(B,Btable)
> mapper(C,Ctable)
> mapper(ABCRelation, Rtable, primary_key=[R.c.a_id, R.c.b_id,
> R.c.c_id], properties={
> 'as':relation(A, backref='relations'),
> 'bs':relation(B, backref='relations'),
> 'cs':relation(C, backref='relations')
> }, allow_null_pks=True)
>
> a = A()
> b = B()
> c = C()
> r = ABCRelation()
> r.a = a
> r.b = b
> r.c = c
> [session.save(x) for x in [a,b,c,r]]
> session.flush()
Ok, I see. But so I have to update many objects. It is sure, that all
the objects depend somehow on A. So I thought on an other Structure
like doing:
A.B.C # normal relation
A.C # if we have no B, but if we have a B A.C and A.B.C are refer to
the same object.
Can this be done?
Martin
> etc
>
> the good news is that the latest trunk of SQLAlchemy (i.e. release
> 0.2.9) will even keep it straight if you delete an ABCRelation and
> create a new one with the same relationships in one session; it will
> turn the DELETE/INSERT into an UPDATE.
>
>
>
> On Sep 27, 2006, at 1:10 PM, Martin Kaffanke wrote:
>
> > Hi there!
> >
> > I don't know if my english is good enaugh to tell you what I want.
> >
> > I have 3 Tables, lets tell them A, B and C. The relations:
> >
> > An A kann have some B's and a B can have some C's. But the main
> > Select
> > will be:
> >
> > and_(A.c.a_id==B.c.a_id, B.c.b_id==C.c.b_id, C.c.c_id=some_integer)
> >
> > So now there are two joins.
> > As you see, we have two joins. We would have only one by doing
> >
> > A B C and a R table, where R has all three ID's:
> >
> > R.c.a_id
> > R.c.b_id
> > R.c.c_id
> >
> > A relation table...
> >
> > and_(A.c.a_id==R.c.a_id, C.c.c_id==some_integer)
> >
> > would be enaught.
> >
> > But how can I save data this way with a mapper?
> >
> > Martin
> >
> >
> > ----------------------------------------------------------------------
> > ---
> > 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
> > [email protected]
> > 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users