5

我想一次执行多个 SELECT 语句,就像我一样

echo "SELECT * FROM x; SELECT * FROM y;" | psql

这样我只向数据库发送一次内容,并且一次接收所有结果。

用 SQLAlchemy 来做会很完美,但它似乎不受支持(不是吗?)。

我想我可能会重新实现 SQLAlchemy 的某些部分来获得该功能,但我也没有在 psycopg2 中找到解决这个问题的方法——执行两个用分号分隔的查询只给出最后一个查询的结果。

那么,是否可以使用 SQLAlchemy(这将是完美的)或使用 psycopg2(这也可以)来做到这一点?

4

2 回答 2

3

Bartosz - 我面临着类似的问题,两年前遇到了你的问题。解决此问题的一种方法可能是使用 Postgres json 支持。您可以做的是构建两个选择查询,将行输出转换为 json,将它们合并在一起,然后在 python 或您使用的任何语言中解码。这将在一次往返数据库中获取数据。

您可以使用 postgres 提供的其他 json 构造函数,例如row_to_jsonhttp ://www.postgresql.org/docs/9.3/static/functions-json.html

SELECT to_json((a, b, c))
FROM x

UNION ALL

SELECT to_json((d, e, f, g, h, i))
FROM y

希望有帮助

于 2015-08-28T14:27:15.117 回答
-1

在您的示例中,运行两个独立的查询。这不是炼金术或 psycopg 的功能。只是纯python:

query1 = s.query(x).all()
query2 = s.query(y).all()
out = query1, query2
于 2013-11-05T22:33:51.180 回答