使用pyodbc从DB2检索数据

2024-09-30 01:25:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用pyodbc从DB2检索数据,并使用Python以JSON格式打印数据。我有两个不同的函数

这幅作品:

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)')

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


Tags: paramrequestdtquerycursorprintpyodbctrim

热门问题