我正在学习SQLAlchemy表达式语言,我正在尝试执行一个简单的查询,通过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]))))
Run Code Online (Sandbox Code Playgroud)
哪个输出:
[(1,), (2,)]
Run Code Online (Sandbox Code Playgroud)
即,只有两个请求列中的一个.我期望:
[(1, 2), (2, 2)]
Run Code Online (Sandbox Code Playgroud)
为了仔细检查我的期望是否正确,我直接在sqlite3和PostgreSQL 9.2(下面的[1]和[2])中运行了等效查询,两者都正确地返回了重复的id.我正在使用SQLAlchemy版本0.8.0b2,Python 3.2.3,sqlite3 3.6.12和Mac OS X 10.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
Run Code Online (Sandbox Code Playgroud)
[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
Run Code Online (Sandbox Code Playgroud)
您的至少一个列需要一个标签来创建两者之间的区别.
print(list(conn.execute(select([users.c.id, users.c.id.label('id2')]))))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
683 次 |
| 最近记录: |