【发布时间】:2021-04-05 16:02:20
【问题描述】:
我使用的是 sqlite,但后来转移到了 MySqL
有效的 Sqlite 代码:
@app.route('/api/v1/users/user', methods=['GET'])
def api_filter():
query_parameters = request.args
userid = query_parameters.get('userid')
username = query_parameters.get('username')
query = "SELECT * FROM tblUser WHERE"
to_filter = []
if userid:
query += ' user_id=? AND'
to_filter.append(userid)
if username:
query += ' username=? AND'
to_filter.append(username)
if not (userid or username):
return page_not_found(404)
query = query[:-4] + ';'
conn = sqlite3.connect('dbApp.db')
conn.row_factory = dict_factory
cur = conn.cursor()
results = cur.execute(query, to_filter).fetchall()
return jsonify(results)
现在当我将它更改为 MySQL 时,它不起作用:
@app.route('/api/v1/users/user', methods=['GET'])
def api_filter():
query_parameters = request.args
userid = query_parameters.get('userid')
username = query_parameters.get('username')
query = "SELECT * FROM tblUser WHERE"
to_filter = []
if userid:
query += ' user_id=? AND'
to_filter.append(userid)
if username:
query += ' username=? AND'
to_filter.append(username)
if not (userid or username):
return page_not_found(404)
query = query[:-4] + ';'
conn = mysql.connector.connect(host="localhost", user="root", password="green", database="dbApp")
conn.row_factory = dict_factory
cur = conn.cursor()
results = cur.execute(query, to_filter).fetchall()
return jsonify(results)
返回的错误: 结果 = cur.execute(query, to_filter).fetchall() 文件“/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/mysql/connector/cursor_cext.py”,第260行,在执行 引发错误。ProgrammingError( mysql.connector.errors.ProgrammingError: SQL 语句中没有使用所有参数 127.0.0.1 - - [28/Dec/2020 17:47:11] "
这是运行后: http://127.0.0.1:5000/api/v1/users/user?userid=3&username=Jo
http://127.0.0.1:5000/api/v1/users/user?userid=3
http://127.0.0.1:5000/api/v1/users/user?username=Jo
还添加了这个: 来自烧瓶导入请求,jsonify 导入mysql.connector
【问题讨论】:
-
您在上面泄露了您的凭据。当您使用 mysql cli 登录时它们是否有效?
-
嗨@AllanWind,是的,我可以确认我可以,将它们放在另一个应用程序中并且工作正常,所以我摸不着头脑
-
第 260 行是什么?
-
@AllanWind 结果 = cur.execute(query, to_filter).fetchall()
-
它需要一个元组,然后你向它发送一个数组。
标签: python mysql flask-restful