首页 > 解决方案 > 使用带有参数的 Flask Pyodbc 从 DB2 获取数据

问题描述

所以,我正在使用烧瓶开发 API。数据在 DB2 中。我尝试如下连接 pyodbc

@app.route('/api/acrdkl/all', methods=['GET'])
def api_all():
    conn = pyodbc.connect("DSN=AS400;UID=....;PWD=....")
    cur = conn.cursor()
    all_books = cur.execute(""" select trim(dkkdcb), trim(dkkdps), trim(dkcob), trim(dkureg), trim(dkbktg), trim(dkblrg), trim(dkthrg)
    from simdta.ACRDKL where dkkdcb=1402 and dkblrg=10 and dkthrg=2020""")
    rows = cur.fetchall()
    result = []
    for dt in rows:
        result.append([x for x in dt])
    return jsonify(result)

结果显示为 JSON。

但是当我尝试使用如下参数时

@app.route('/api/acrdkl/filter', methods=['GET'])
def api_filter():

    dkkdcb = request.args.get('DKKDCB', 0)
    dkblrg = request.args.get('DKBLRG', 0)
    dkthrg = request.args.get('DKTHRG', 0)

    query = """selecttrim(dkkdcb),trim(dkkdps),trim(dkcob),trim(dkureg),
    trim(dkbktg), trim(dkblrg), trim(dkthrg)
    from simdta.ACRDKL WHERE """

    conn = pyodbc.connect("DSN=AS400;UID=.....;PWD=.....")
    cur = conn.cursor()
    rows = cur.execute(query, [int(dkkdcb), int(dkblrg), int(dkthrg)])
    rows.fetchall()
    print("rows 2 ", rows)
    result = []
    for dt in rows:
        result.append([x for x in dt])
    return jsonify(results)

我去了这个http://127.0.0.1:5000/api/acrdkl/filter?DKKDCB=1402&DKBLRG=10&DKTHRG=2020,它会抛出这样的错误

pyodbc.DataError: ('22023', '[22023] [Microsoft][ODBC DB2 Driver]数据异常 - SQLSTATE 22023, SQLCODE -302. SQLSTATE: 22023, SQLCODE: -302 (-302) (SQLExecDirectW)')

我怎样才能得到想要的结果?我的错误在哪里?任何帮助将不胜感激。谢谢

标签: apiflaskdb2pyodbc

解决方案


我没有看到您正在访问Flask 提供的请求数据,例如:

dkbrlg=request.args.get('dkbrlg',0)

推荐阅读