Psycopg2或SQLAlchemy中的多个SELECT

时间:2013-11-05 09:21:20

标签: python sql postgresql sqlalchemy psycopg2

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

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

所以我只向数据库发送一次,并立即收到所有结果。

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

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

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

2 个答案:

答案 0 :(得分:1)

巴托斯 - 我正面临着类似的问题,并在两年前遇到了你的问题。解决这个问题的一种方法可能是使用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

希望有所帮助

答案 1 :(得分:0)

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

query1 = s.query(x).all()
query2 = s.query(y).all()
out = query1, query2