如何在sqlalchemy中为表设置别名?

时间:2018-02-15 15:53:24

标签: python sql sqlalchemy

我正在尝试用sqlalchemy语法编写MySQL查询,但我不知道如何表示aliasForC。你能帮帮我吗?

使用aliasForC别名查询:

SELECT aliasForC.secondId
FROM A, B, C as aliasForC
WHERE B.firstId = A.firstId 
AND B.status = 'Reprep'
AND A.secondId = aliasForC.secondId
AND B.status = ALL (
   SELECT status
   FROM C
   INNER JOIN A ON A.secondId = C.secondId 
   INNER JOIN B ON A.firstId = B.firstId 
   WHERE code = aliasForC.code
)

2 个答案:

答案 0 :(得分:1)

我认为alias是您正在寻找的。

http://docs.sqlalchemy.org/en/latest/core/selectable.html http://docs.sqlalchemy.org/en/latest/core/selectable.html#sqlalchemy.sql.expression.Alias

user_alias = aliased(User, name='user2')
q = sess.query(User, User.id, user_alias)

请参阅:http://docs.sqlalchemy.org/en/latest/orm/query.html#sqlalchemy.orm.query.Query.column_descriptions

import sqlparse
import sqlalchemy as sa

meta = sa.MetaData()

a = sa.Table(
    'a', meta,
    sa.Column('id', sa.Integer, primary_key=True),
)

b = sa.Table(
    'b', meta,
    sa.Column('id', sa.Integer, primary_key=True),
    sa.Column('x', sa.Integer, sa.ForeignKey(a.c.id)),
    sa.Column('y', sa.Integer, sa.ForeignKey(a.c.id)),
)

x = b.alias('x')
y = b.alias('y')

query = (
    sa.select(['*']).
    select_from(a.join(x, a.c.id == x.c.x)).
    select_from(a.join(y, a.c.id == y.c.y))
)

print(sqlparse.format(str(query), reindent=True))

# OUTPUT:
#
#   SELECT *
#   FROM a
#   JOIN b AS x ON a.id = x.x,
#                  a
#   JOIN b AS y ON a.id = y.y

https://gist.github.com/sirex/04ed17b9c9d61482f98b#file-main-py-L27-L28

答案 1 :(得分:1)

你可以这样做:

 aliasForC = aliased(C)
 # And then:
 join(aliasForC, aliasForC.firstId == A.firstId )

对于All语句,您可以使用所有_()