2017-01-20 8 views
0

sqlalchemy式言語を使用して、2の表からidsを選択します。したがって、私はラベルを使用する必要があります。この問題を解決する方法。関連するテーブルのIDと他のすべての属性値が必要です。次のようにコードスニペットは、次のとおりです。ラベル付きsqlalchemyコアとpostgresを結合します

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) 

エラーログ:

"try 'use_labels' option on select statement." % key) InvalidRequestError: Ambiguous column name 'id' in result set! try 'use_labels' option on select statement.

答えて

0

私はSQLAlchemy tutorialと同じユースケースをしました。

>>> from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey 
>>> metadata = MetaData() 
>>> users = Table('users', metadata, 
...  Column('id', Integer, primary_key=True), 
...  Column('name', String), 
...  Column('fullname', String), 
...) 

>>> addresses = Table('addresses', metadata, 
... Column('id', Integer, primary_key=True), 
... Column('user_id', None, ForeignKey('users.id')), 
... Column('email_address', String, nullable=False) 
... ) 

where声明を持つすべてのデータ

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, '[email protected]'), 
(1, 'jack', 'Jack Jones', 2, 1, '[email protected]'), 
(2, 'wendy', 'Wendy Williams', 3, 2, '[email protected]'), 
(2, 'wendy', 'Wendy Williams', 4, 2, '[email protected]')] 

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, '[email protected]'), 
(1, 'jack', 'Jack Jones', 2, 1, '[email protected]')] 

必要はありませんが、それはあなたに私が使用しています '使用ラベルを'?述べる任意のエラーを与えていない

+0

ラベルsqlalchemyコア0.11。 – user956424

+0

@ user956424私は 'SQLAlchemy == 1.1.4'を使用していますが、 'label'エラーはありません。 'sqlalchemy core 0.11'はどういう意味ですか? – theodor

+0

申し訳ありませんが、Flask v.0.11とsqlalchemy core v.1.0.8 – user956424

関連する問題