i know if i use later versions my problem will be easily solved but
upgrading to newer version might screw some parts of project, that i
will have to check and will be a bit bothersome task. please suggest
me something to make it work with this version only.

On Aug 17, 11:19 pm, Philip Jenvey <pjen...@underboss.org> wrote:
> On Aug 17, 2009, at 2:48 AM, vindhyavasini wrote:
>
>
>
>
>
> > hi all,
> > i am working on an open source project  (http://project.askspree.de/)
> > i need to write this simple sql :
>
> > SELECT tg_user.websites_specified AS tg_user_websites_specified,
> > tg_user.display_name AS tg_user_display_name, tg_user.created AS
> > tg_user_created, tg_user.user_name AS tg_user_user_name,
> > tg_user.expertise_calculated_subtree AS
> > tg_user_expertise_calculated_subtree, tg_user.keywords_specified AS
> > tg_user_keywords_specified, tg_user.expertise_subtree AS
> > tg_user_expertise_subtree, tg_user.expertise AS tg_user_expertise,
> > tg_user.user_id AS tg_user_user_id, tg_user.password AS
> > tg_user_password, tg_user.email_address AS tg_user_email_address
>
> > FROM tg_user LEFT JOIN visit_identity ON
> > tg_user.user_id=visit_identity.user_id
> > LEFT JOIN visit ON visit_identity.visit_key=visit.visit_key
> > WHERE visit_identity.user_id IS NULL OR visit.visit_key IS NULL OR
> > visit.expiry < now()
> > ORDER BY tg_user.user_id  LIMIT 10 OFFSET 0
>
> > For this i have mapper classes
> > User            (tg_user)
> > VisitIdentity  (visit_identity)
> > Visit            (visit)
>
> > problem is that while defining mapper i couldnt set proper relation to
> > these tables so i have to write condition to outer join these tables
> > in the query only.
> > i have tried these options :
> > 1. session.query(User).select_from(
> >                            text(' LEFT JOIN visit_identity ON
> > tg_user.user_id==visit_identity.user_id LEFT JOIN visit ON
> > visit_identity.visit_key==visit.visit_key')
> >                        ).select(
> >                        or_(    (VisitIdentity.c.user_id==None) ,
> >                                (Visit.c.visit_key==None),
> >                                (Visit.c.expiry < time)
> >                            ),
> >                        limit = limit,
> >                        offset = offset
> >                        )
>
> > it outputs:
> > SELECT tg_user.*
> > FROM tg_user, LEFT JOIN visit_identity ON
> > tg_user.user_id=visit_identity.user_id
> > LEFT JOIN visit ON visit_identity.visit_key=visit.visit_key,
> > visit_identity, visit
> > WHERE visit_identity.user_id IS NULL OR visit.visit_key IS NULL OR
> > visit.expiry < now()
> > ORDER BY tg_user.user_id  LIMIT 10 OFFSET 0
>
> > means brute force using text wont work here :(
>
> > 2. select(   [User],
> >                        from_obj=(
> >                           outerjoin(
>
> > User,VisitIdentity,User.c.user_id==VisitIdentity.c.user_id).outerjoin(
>
> > Visit,VisitIdentity.c.visit_key==Visit.c.visit_key
> >                            )
> >                        ),
> >                    ).filter(
> >                        or_(    (VisitIdentity.c.user_id==None) ,
> >                                (Visit.c.visit_key==None),
> >                                (Visit.c.expiry < time)
> >                            )
> >                        )
>
> > it gives error that: AttributeError: type object 'User' has no
> > attribute '_selectable'
>
> > 3. session.query(User).outerjoin(
>
> > VisitIdentity,User.c.user_id==VisitIdentity.c.user_id).outerjoin(
>
> > Visit,VisitIdentity.c.visit_key==Visit.c.visit_key
> >                        ).select(
> >                        or_(    (VisitIdentity.c.user_id==None) ,
> >                                (Visit.c.visit_key==None),
> >                                (Visit.c.expiry < time)
> >                            ),
> >                        limit = limit,
> >                        offset = offset
> >                        )
>
> > it gives error that:
> > TypeError: outerjoin() takes exactly 2 arguments (3 given)
>
> > documentation says u can pass condition in this outerjoin() (http://
> >www.sqlalchemy.org/docs/03/sqlalchemy_sql.html#docstrings_sqlalchemy....)
>
> These are docs for the SQL Expression language outerjoin, whereas  
> you're using outerjoin on the ORM query, which is different, and only  
> takes one arg. I think it takes more args in later versions of  
> SQLAlchemy -- 0.3.7 is ancient
>
> --
> Philip Jenvey
--~--~---------~--~----~------------~-------~--~----~
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