在postgresql中传递查询中的子查询值

时间:2017-04-09 16:51:02

标签: postgresql subquery nested-query

我正在尝试使用子查询的结果在一般查询中传递,而是直接返回子查询的值。 在下面的示例中,我有一个包含一些数字结果的表,另一个表包含要在查询中使用的公式

通过硬编码公式直接查询结果没有问题:

SELECT      (SELECT formula FROM myschema.formulas WHERE id = 'res1')    AS "Result1", 
            col2            AS "Result2",                      
FROM   
myschema.results

但是我想使用子查询从公式表中获取公式:

Result 1    Result 2
3           2

在第一个查询中,我正确地得到类似

的内容
Result 1    Result 2
col1 + col2         2

但是在使用子查询时我错误地得到了:

import flask
from flask import request, render_template
import numpy as np
import pandas as pd
from copy import deepcopy
from werkzeug import secure_filename
from PIL import Image
import catdog

# Initialize the app
app = flask.Flask(__name__)

@app.route("/")
def viz_page():
    with open("frontend.html", 'r') as viz_file:
        return viz_file.read()

@app.route("/uploader", methods=["GET","POST"])
def get_image():
    if request.method == 'POST':
        f = request.files['file']
        sfname = 'images/'+str(secure_filename(f.filename))
        f.save(sfname)

        clf = catdog.classifier()
        #clf.save_image(f.filename)

        return render_template('result.html', pred = clf.predict(sfname), imgpath = sfname)


#--------- RUN WEB APP SERVER ------------#

# Start the app server on port 80
# (The default website port)
app.run(host='0.0.0.0', port=5000, debug=True)

如何确保在第一个查询中解释子查询结果?我找到了一些使用连接的解决方案,但我不确定这是我需要的,并想知道是否有更简单的方法来实现这一点。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

您要求的是动态SQL。

像这样的东西。

CREATE OR REPLACE FUNCTION foo()
RETURNS SETOF int AS
$$
  BEGIN
    RETURN QUERY EXECUTE 'SELECT ' || (SELECT 'x'::text) ||' FROM generate_series(1,10) AS gs(x);';
  END;
$$ LANGUAGE plpgsql;