如何强制SQLAlchemy包含重复列?(How do I force SQLAlchemy to include duplicate columns?)

编程入门 行业动态 更新时间:2024-10-26 22:25:34
如何强制SQLAlchemy包含重复列?(How do I force SQLAlchemy to include duplicate columns?)

我正在学习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]))))

哪个输出:

[(1,), (2,)]

即,只有两个请求列中的一个。 我期望:

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

为了仔细检查我的期望是否正确,我直接在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

[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

I'm learning the SQLAlchemy Expression Language, and I'm trying to execute a trivial query that returns a single duplicated column via 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]))))

Which outputs:

[(1,), (2,)]

I.e., only one of the two requested columns. I expected:

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

To double-check that my expectations are correct, I ran the equivalent queries directly in sqlite3 and PostgreSQL 9.2 ([1] and [2] below), both of which correctly returned the duplicated ids. I'm using SQLAlchemy version 0.8.0b2, Python 3.2.3, sqlite3 3.6.12, and Mac OS X 10.6 and 10.7.

Thanks in advance!

[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

最满意答案

至少有一个列需要一个标签来区分两者。

print(list(conn.execute(select([users.c.id, users.c.id.label('id2')]))))

At least one of your columns needs a label to create a distinction between the two.

print(list(conn.execute(select([users.c.id, users.c.id.label('id2')]))))

更多推荐

本文发布于:2023-08-03 16:41:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1394552.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:force   SQLAlchemy   include   columns   duplicate

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!