On Oct 12, 2013, at 10:26 AM, Jerry <[email protected]> wrote: > SQLAlchemy 0.8 is generating wrong SQL for my simple self-join -- > > class ScheduledJob(Base): > Id = Column('Id', Integer, primary_key=True) > DependentJob1 = Column('DependentJob1', Integer) > > DJ1 = aliased(ScheduledJob) > query = dbsession.query(ScheduledJob.Id, DJ1.Id).outerjoin( > DJ1, ScheduledJob.DependentJob1==DJ1.Id) > print query > > prints the wrong SQL -- > > SELECT "ScheduledJob"."Id" AS "ScheduledJob_Id" > FROM "ScheduledJob" LEFT OUTER JOIN "ScheduledJob" AS "ScheduledJob_1" ON > "ScheduledJob"."DependentJob1" = "ScheduledJob"."Id"
cannot reproduce. test case run on 0.8.2, 0.8.1, 0.8.0, results are correct:
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class ScheduledJob(Base):
__tablename__ = 'ScheduledJob'
Id = Column('Id', Integer, primary_key=True)
DependentJob1 = Column('DependentJob1', Integer)
session = Session()
DJ1 = aliased(ScheduledJob)
query = session.query(ScheduledJob.Id, DJ1.Id).outerjoin(DJ1,
ScheduledJob.DependentJob1==DJ1.Id)
print query
output:
SELECT "ScheduledJob"."Id" AS "ScheduledJob_Id", "ScheduledJob_1"."Id" AS
"ScheduledJob_1_Id"
FROM "ScheduledJob" LEFT OUTER JOIN "ScheduledJob" AS "ScheduledJob_1" ON
"ScheduledJob"."DependentJob1" = "ScheduledJob_1"."Id"
I suspect that in your actual application, "DJ1" is not actually an alias of
ScheduledJob.
> BTW, I'm mapping multiple databases, could it be related to this problem?
not really, no.
> Sorry this is a "repost" of my SO question (which has not seen an answer for
> two days)
> http://stackoverflow.com/questions/19315202/sqlalchemy-generates-wrong-sql-for-aliased-and-self-join
copied this response to there.
signature.asc
Description: Message signed with OpenPGP using GPGMail
