awkardly and inefficiently from a SQL perspective.   contains_eager() with an 
explicit query() would produce better result


from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
import datetime

class A(Base):
    __tablename__ = 'a'
    id = Column(Integer, primary_key=True)
    bs = relationship("B")

class B(Base):
    __tablename__ = 'b'
    id = Column(Integer, primary_key=True)
    a_id = Column(Integer, ForeignKey('a.id'))
    date = Column(Date)

A.latest_b = relationship(B, 
                    primaryjoin=and_(
                            A.id==B.a_id, 
                            
B.date==select([func.max(B.date)]).where(B.a_id==A.id).correlate(A.__table__)
                        )
                    )

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

s.add_all([
    A(bs=[
            B(date=datetime.date(2011, 10, 5)),
            B(date=datetime.date(2011, 8, 4)),
            B(date=datetime.date(2011, 9, 17)),
        ]),
    A(bs=[
            B(date=datetime.date(2011, 10, 5)),
            B(date=datetime.date(2011, 8, 4)),
            B(date=datetime.date(2011, 9, 17)),
        ]),
])
s.commit()

for obj in s.query(A).options(joinedload(A.latest_b)):
        print obj.latest_b



On Aug 4, 2011, at 5:55 PM, Mark Erbaugh wrote:

> Table A has a one to many relationship with Table B.  There may be zero or 
> more rows in B for each row in A.
> 
> I would like to have a query that retrieves all the rows in table A joined 
> with the "first" related row in table B (if one exists). In this case, each 
> row in table B has a DATE field and I want to retrieve the row with the 
> latest date.  Is this possible using joinedload?
> 
> Thanks,
> Mark
> 
> -- 
> 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