It looks like only one aliased table gets aliased correctly when joining to 
multiple aliased tables. 

Test case: 

from __future__ import print_function
from sqlalchemy import Integer, String, select, Date, and_
from sqlalchemy import Column

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm.util import aliased

Base = declarative_base()

class Users(Base):
    __tablename__ = "users"
    id = Column(Integer, primary_key=True)
    name = Column(String)
    date = Column(Date)

a = aliased(Users, name="aaa")
b = aliased(Users, name="bbb")
c = aliased(Users, name="ccc")

sel = select([a.name, b.name]).select_from(
    c.__table__.join(
        a.__table__,
        a.name == c.name,
    ).join(
        b.__table__,
        b.date == c.date,
    )
)

print(sel)

Output:
SELECT aaa.name, bbb.name
FROM users AS bbb, users JOIN users ON aaa.name = ccc.name JOIN users ON 
bbb.date = ccc.date

I expect there to be three "AS" clauses in this sql, but there is only one, 
e.g.
SELECT aaa.name, bbb.name
FROM users AS ccc JOIN users AS aaa ON aaa.name = ccc.name JOIN users AS 
bbb ON bbb.date = ccc.date

Using sqlalchemy 1.0.9, python 3.4.3

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to