python cursor.execute 返回空

python cursor.execute returning empty

我想用于 REST API 服务器的 python 代码有问题。

当前的问题是,当我知道该值存在时,我的数据库查询返回 null

具体路径代码:

@app.route('/data/active_predicted/<int:ticketId>', methods=['GET'])
def search_db_tickId_act(ticketId):
    cursor = db.cursor()
    db_query = cursor.execute("select * from active_predicted where ticketId=" + str(ticketId))
    json_output = json.dumps(dict(cursor.fetchall()))
    cursor.close()
    if not cursor.fetchall():
        return "Nothing found \n SQL Query: " + "select * from active_predicted where ticketId=" + str(ticketId)
    else:
        return str(cursor.fetchall())

当我访问这个 URL 时,我得到以下信息:

未找到 SQL 查询:select * 来自 active_predicted where ticketId=1324

当我插入这个 SQL 查询时,我得到了我想要的结果,1 行 2 列,但似乎程序无法找到该行?

问题:

  1. 如@pvg 所述,查询数据库时需要对输入值进行转义;
  2. 如果要获取类似字典的结果,初始化游标时传入dictionary=True
  3. 在您的原始代码中,您没有 return 变量 json_output;
  4. 要仅获取一个结果,请使用 fetchone 而不是 fetchall;
  5. 调用cursor.close()后,无论之前是否获取,都无法从该游标中获取任何内容;
  6. 使用 try-finally 确保游标总是(最后)关闭。

固定代码如下:

@app.route('/data/active_predicted/<int:ticketId>', methods=['GET'])
def search_db_tickId_act(ticketId):
    try:
        cursor = db.cursor(dictionary=True)
        db_query = cursor.execute("select * from active_predicted where ticketId=%s LIMIT 1", ticketId)
        row = cursor.fetchone()
        if row:
            return json.dumps(row)
        else:
            return "Nothing found \n SQL Query: " + "select * from active_predicted where ticketId=" + str(ticketId)
    finally:
        cursor.close()