我想一次执行多个SELECT语句,就像我使用
一样echo "SELECT * FROM x; SELECT * FROM y;" | psql
所以我只向数据库发送一次,并立即收到所有结果。
使用SQLAlchemy完成它会很完美,但它似乎不受支持(不是吗?)。
我想我可能会重新实现SQLAlchemy的某些部分来获取该功能,但我也没有在psycopg2中找到解决此问题的方法 - 执行两个用分号分隔的查询只会得到最后一个查询的结果。
那么,是否可以使用SQLAlchemy(这将是完美的)或psycopg2(这也可以)这样做?
答案 0 :(得分:1)
巴托斯 - 我正面临着类似的问题,并在两年前遇到了你的问题。解决这个问题的一种方法可能是使用Postgres json支持。你可以做的是构造两个选择查询,将行输出转换为json,将它们组合在一起然后用python或你正在使用的任何语言进行解码。这样就可以在数据库的往返中获取数据。
您可以使用postgres可用的其他json构造函数,例如row_to_json
:
http://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