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 列,但似乎程序无法找到该行?
问题:
- 如@pvg 所述,查询数据库时需要对输入值进行转义;
- 如果要获取类似字典的结果,初始化游标时传入
dictionary=True
;
- 在您的原始代码中,您没有 return 变量
json_output
;
- 要仅获取一个结果,请使用
fetchone
而不是 fetchall
;
- 调用
cursor.close()
后,无论之前是否获取,都无法从该游标中获取任何内容;
- 使用 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()
我想用于 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 列,但似乎程序无法找到该行?
问题:
- 如@pvg 所述,查询数据库时需要对输入值进行转义;
- 如果要获取类似字典的结果,初始化游标时传入
dictionary=True
; - 在您的原始代码中,您没有 return 变量
json_output
; - 要仅获取一个结果,请使用
fetchone
而不是fetchall
; - 调用
cursor.close()
后,无论之前是否获取,都无法从该游标中获取任何内容; - 使用 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()