首页 > 解决方案 > 使用 pyodbc 从 DB2 检索数据

问题描述

我正在尝试使用 pyodbc 从 DB2 检索数据并使用 Python 以 JSON 格式打印它。我有 2 种不同的功能。

这个作品:

import flask
from flask import flash, request, Flask, jsonify
import pyodbc

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

    dkkdcb = request.args.get('dkkdcb')
    dkblrg = request.args.get('dkblrg')
    dkthrg = request.args.get('dkthrg')

    query = """select trim(dkkdcb), trim(dkkdps), trim(dkcob), trim(dkureg), trim(dkbktg), trim(dkblrg), trim(dkthrg)
    from simdta.ACRDKL WHERE dkkdcb = param_dkkdcb and dkblrg = param_dkblrg and dkthrg = param_dkthrg"""

    print("Dkkdcb ", dkkdcb)
    print("Dkblrg ", dkblrg)
    print("Dkthrg ", dkthrg)

    query = query.replace("param_dkkdcb", dkkdcb)
    query = query.replace("param_dkblrg", dkblrg)
    query = query.replace("param_dkthrg", dkthrg)
    print("Query 1 ", query)

    conn = pyodbc.connect("DSN=AS400;UID=.....;PWD=....")
    cur = conn.cursor()
    cur.execute(query)
    rows = cur.fetchall()
    results = []
    for dt in rows:
        print("DT ", dt)
        print("dkkdcb: ", dt[0])
        print("dkkdps: ", dt[1])
        print("dkcob: ", dt[2])
        print("dkureg: ", dt[3])
        print("dkbktg: ", dt[4])
        print("dkblrg: ", dt[5])
        print("dkthrg: ", dt[6])
        
        print("\n")
        results.append([x for x in dt])
    return jsonify(results)

但是当我尝试使用这个时try-except

@app.route('/api/acrdkl/filter2', methods=['GET'])
def filter2():
    try:
        cnxn = pyodbc.connect("DSN=AS400;UID=....;PWD=....")
        cursor = cnxn.cursor()
        sql= """select 
        trim(dkkdcb), trim(dkkdps), trim(dkcob), trim(dkureg), trim(dkbktg), trim(dkblrg), trim(dkthrg)
        from simdta.ACRDKL where dkkdcb=? and dkblrg=? and dkthrg=?"""
        data=(int(ardkkdcb), month, year)
        cursor.execute(sql, 1402, 10, 2020)
        rows = cursor.fetchall()
        result = []
        for dt in rows:
            print("dkkdcb: ", dt[0])
            print("dkkdps: ", dt[1])
            print("dkcob: ", dt[2])
            print("dkureg: ", dt[3])
            print("dkbktg: ", dt[4])
            print("dkblrg: ", dt[5])
            print("dkthrg: ", dt[6])
            
            print("\n")
            result.append([x for x in dt])
        return json.dumps(result)
    except Exception as e:
        return(str(e))

它给了我这个错误:

('22023', '[22023] [Microsoft][ODBC DB2 Driver]Data exception - SQLSTATE 22023, SQLCODE -302. SQLSTATE: 22023, SQLCODE: -302 (-302) (SQLExecDirectW)')

我在第二个功能中遗漏了什么吗?如果有更好的解决方法将不胜感激。提前致谢。

标签: pythonflaskdb2pyodbcdb2-400

解决方案


推荐阅读