3

私はSQLAlchemy式言語を学んでおり、次の方法で1つの重複した列を返す簡単なクエリを実行しようとしていますselect([users.c.id, users.c.id])

from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, insert, select
engine = create_engine('sqlite:///:memory:', echo=True)
conn = engine.connect()
metadata = MetaData()
users = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('fullname', String),
)
metadata.create_all(engine)
conn.execute(users.insert(), [
{'id': 1, 'name' : 'jack', 'fullname': 'Jack Jones'},
{'id': 2, 'name' : 'wendy', 'fullname': 'Wendy Williams'},
])
print(list(conn.execute(select([users.c.id, users.c.id]))))

どの出力:

[(1,), (2,)]

つまり、要求された2つの列のうちの1つだけです。私は期待しました:

[(1, 2), (2, 2)]

私の期待が正しいことを再確認するために、sqlite3とPostgreSQL 9.2(以下の[1]と[2])で同等のクエリを直接実行しました。どちらも重複したIDを正しく返しました。SQLAlchemyバージョン0.8.0b2、Python 3.2.3、sqlite3 3.6.12、およびMac OSX10.6および10.7を使用しています。

前もって感謝します!

[1] sqlite3

$ sqlite3 temp.db
CREATE TABLE users(id INTEGER, name TEXT, fullname TEXT);
INSERT INTO users VALUES(1, 'jack', 'Jack Jones');
INSERT INTO users VALUES(2, 'wendy', 'Wendy Williams');
SELECT id, id FROM users;
->
1|1
2|2

[2] PostgreSQL

$ /Library/PostgreSQL/9.2/bin/psql -U postgres
CREATE DATABASE temp;
CREATE TABLE users(id INTEGER, name TEXT, fullname TEXT);
INSERT INTO users VALUES(1, 'jack', 'Jack Jones');
INSERT INTO users VALUES(2, 'wendy', 'Wendy Williams');
SELECT id, id FROM users;
->
1 |  1
2 |  2
4

1 に答える 1

5

2つの列を区別するために、少なくとも1つの列にラベルが必要です。

print(list(conn.execute(select([users.c.id, users.c.id.label('id2')]))))
于 2013-01-24T21:51:16.507 に答える