Python sqlalchemy核心带标签并连接postgres

Python sqlalchemy核心带标签并连接postgres,python,postgresql,sqlalchemy,Python,Postgresql,Sqlalchemy,使用sqlalchemy表达式语言,我希望从表2中选择ids。因此,我需要使用标签。如何解决这个问题。我需要相关表中的ID和所有其他属性值。代码片段如下所示: s1 = select([rt_issues.c.id.label('rt_issue_id'), rt_issues, queues.c.id.label('q_id'), queues, ]).\ where(rt_issue

使用sqlalchemy表达式语言,我希望从表2中选择ids。因此,我需要使用标签。如何解决这个问题。我需要相关表中的ID和所有其他属性值。代码片段如下所示:

s1 = select([rt_issues.c.id.label('rt_issue_id'),
             rt_issues,
             queues.c.id.label('q_id'),
             queues,
            ]).\
    where(rt_issues.c.id == issue_id).\
    select_from(rt_issues.
    outerjoin(queues,
              rt_issues.c.queue_id == queues.c.id))
rs1 = conn.execute(s1)
错误日志:

“请在select语句上尝试“使用标签”选项。”%key) InvalidRequestError:结果集中的列名“id”不明确!尝试 select语句上的“使用标签”选项

我使用了相同的用例

所有数据

In [36]: s = select([users.c.id, users, addresses.c.id, addresses]).select_from(users.outerjoin(addresses))
In [37]: conn.execute(s).fetchall()
2017-01-20 19:13:11,218 INFO sqlalchemy.engine.base.Engine SELECT users.id, users.name, users.fullname, addresses.id, addresses.user_id, addresses.email_address
FROM users LEFT OUTER JOIN addresses ON users.id = addresses.user_id
2017-01-20 19:13:11,218 - sqlalchemy.engine.base.Engine - INFO - SELECT users.id, users.name, users.fullname, addresses.id, addresses.user_id, addresses.email_address
FROM users LEFT OUTER JOIN addresses ON users.id = addresses.user_id
2017-01-20 19:13:11,219 INFO sqlalchemy.engine.base.Engine {}
2017-01-20 19:13:11,219 - sqlalchemy.engine.base.Engine - INFO - {}
Out[37]:
[(1, 'jack', 'Jack Jones', 1, 1, 'jack@yahoo.com'),
 (1, 'jack', 'Jack Jones', 2, 1, 'jack@msn.com'),
 (2, 'wendy', 'Wendy Williams', 3, 2, 'www@www.org'),
 (2, 'wendy', 'Wendy Williams', 4, 2, 'wendy@aol.com')]
使用
where
语句

In [42]: s = select([users.c.id, users, addresses.c.id, addresses]).where(users.c.id == 1).select_from(users.outerjoin(addresses, addresses.c.user_id == users.c.id))
In [43]: conn.execute(s).fetchall()
2017-01-20 19:23:41,153 INFO sqlalchemy.engine.base.Engine SELECT users.id, users.name, users.fullname, addresses.id, addresses.user_id, addresses.email_address
FROM users LEFT OUTER JOIN addresses ON addresses.user_id = users.id
WHERE users.id = %(id_1)s
2017-01-20 19:23:41,153 - sqlalchemy.engine.base.Engine - INFO - SELECT users.id, users.name, users.fullname, addresses.id, addresses.user_id, addresses.email_address
FROM users LEFT OUTER JOIN addresses ON addresses.user_id = users.id
WHERE users.id = %(id_1)s
2017-01-20 19:23:41,155 INFO sqlalchemy.engine.base.Engine {'id_1': 1}
2017-01-20 19:23:41,155 - sqlalchemy.engine.base.Engine - INFO - {'id_1': 1}
Out[43]:
[(1, 'jack', 'Jack Jones', 1, 1, 'jack@yahoo.com'),
 (1, 'jack', 'Jack Jones', 2, 1, 'jack@msn.com')]

没有必要使用标签

说明“使用标签”时没有给您任何错误吗?我使用的是sqlalchemy core 0.11。@user956424我使用
sqlalchemy==1.1.4
并且没有“标签”错误。关于
sqlalchemy core 0.11
,您是什么意思?很抱歉,它应该被称为Flask v.0.11和sqlalchemy core v.1.0.8
In [42]: s = select([users.c.id, users, addresses.c.id, addresses]).where(users.c.id == 1).select_from(users.outerjoin(addresses, addresses.c.user_id == users.c.id))
In [43]: conn.execute(s).fetchall()
2017-01-20 19:23:41,153 INFO sqlalchemy.engine.base.Engine SELECT users.id, users.name, users.fullname, addresses.id, addresses.user_id, addresses.email_address
FROM users LEFT OUTER JOIN addresses ON addresses.user_id = users.id
WHERE users.id = %(id_1)s
2017-01-20 19:23:41,153 - sqlalchemy.engine.base.Engine - INFO - SELECT users.id, users.name, users.fullname, addresses.id, addresses.user_id, addresses.email_address
FROM users LEFT OUTER JOIN addresses ON addresses.user_id = users.id
WHERE users.id = %(id_1)s
2017-01-20 19:23:41,155 INFO sqlalchemy.engine.base.Engine {'id_1': 1}
2017-01-20 19:23:41,155 - sqlalchemy.engine.base.Engine - INFO - {'id_1': 1}
Out[43]:
[(1, 'jack', 'Jack Jones', 1, 1, 'jack@yahoo.com'),
 (1, 'jack', 'Jack Jones', 2, 1, 'jack@msn.com')]