I read part of a book called "Getting Things Done", which made the point, "if it takes less than two minutes, do it now". So I respond to these really fast strictly just to keep my inbox empty. Good luck !
On Jun 16, 2012, at 11:55 AM, Thierry Florac wrote: > > Hi Michael, > > Do you take a break sometimes during the week-end? ;-) > > Well, this seems quite fine, and a very quick answer as usual!!! > I also agree that this is a "bad" model, but data is provided by an > external partner and I can't update it :-( > I was just sure that SA was able to handle it anyway :-) > > I'll try to test this quickly, but not before monday morning in > fact when being back at work :-/ > > Many thanks, > Thierry > > > Le Sat, 16 Jun 2012 11:41:29 -0400, Michael Bayer > <mike...@zzzcomputing.com> a �crit: > >> >> It's not a basic question at all as this is a rare edge case, and >> it's not a "foreign key" by definition. You need to relate the two >> tables based on a SQL function, in this case a concatenation. In >> some cases this can be tricky, and there's improvements in 0.8 to >> address that, though in this case it seems to work without too much >> difficulty: >> >> from sqlalchemy import * >> from sqlalchemy.orm import * >> from sqlalchemy.ext.declarative import declarative_base >> >> Base= declarative_base() >> >> class A(Base): >> __tablename__ = "a" >> >> id1 = Column(String, primary_key=True) >> id2 = Column(String, primary_key=True) >> bs = relationship("B", >> primaryjoin="B.a_id == A.id1 + A.id2", >> foreign_keys="B.a_id", >> viewonly=True) >> >> class B(Base): >> __tablename__ = "b" >> id = Column(Integer, primary_key=True) >> a_id = Column(String) >> >> e = create_engine("sqlite://", echo=True) >> Base.metadata.create_all(e) >> s = Session(e) >> >> s.add_all([ >> A(id1="x", id2="y", bs=[ >> B(a_id="xy"), >> B(a_id="xy") >> ]), >> A(id1="q", id2="p", bs=[ >> B(a_id="qp") >> ]) >> ]) >> >> s.commit() >> >> print s.query(A).first().bs >> >> for a in s.query(A).options(joinedload(A.bs)): >> print a.bs >> > > -- > 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.