【发布时间】:2017-05-19 10:34:50
【问题描述】:
我想用于 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 时,我会返回以下内容:
Nothing found SQL Query: select * from active_predicted where ticketId=1324
当我插入这个 SQL 查询时,我得到了我想要的结果,1 行 2 列,但似乎程序无法找到该行?
【问题讨论】:
-
我猜你正在使用
json_output = json.dumps(dict(cursor.fetchall()))行中的所有结果,但我不是 Python 数据库专家。我还建议您可能不想使用字符串操作来构造查询(DB 接口有自己更安全的指定参数的方式)。 -
首先,不要通过字符串连接来构造查询,你的程序很容易受到sql注入的攻击。游标的命名也是有原因的——它在结果集中向前推进,所以你不能一直重复调用“fetchall”——第一个 fetchall 会获取所有结果。
-
@pvg 谢谢你的提示,我习惯了java编程,所以我不太确定这些功能。另外,感谢您提供有关 SQL 注入的提示。问题是即使底部没有 if else 语句,返回的 JSON 对象内部仍然没有任何数据。
-
fetchall返回一个列表,我认为您不能将该结果传递给dict()。您期望的理想结果是什么? -
@Jimmy np,您可能需要阅读 python db api(无论您使用什么驱动程序都可以实现它)。 cursor 和prepared statements 的基本概念与JDBC非常相似
标签: python mysql-python