【发布时间】:2018-09-06 15:04:33
【问题描述】:
在我的烧瓶应用程序(Flask 0.12.2,Python 3.6.2)中,我想从 MySQL 数据库中选择行。 这是我的导入:
from flask import Flask, jsonify
from flaskext.mysql import MySQL
还有一些初始化:
app = Flask(__name__)
app.config['MYSQL_DATABASE_PORT'] = 3306
app.config['MYSQL_DATABASE_USER'] = '...'
app.config['MYSQL_DATABASE_PASSWORD'] = '...'
app.config['MYSQL_DATABASE_DB'] = '...'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
mysql = MySQL()
mysql.init_app(app)
con = mysql.connect()
顺便说一下,我的桌子是这样的:
================================
标识 |姓名 |年龄
1 | “约翰” | 20
================================
所以现在我要编写一个以“column_name”和“id”为参数的函数:
@app.route('/test/<device_id>/<column_name>', methods=['GET'])
def test(column_name, device_id):
sql = "SELECT %s FROM `table` WHERE `id` = %s"
cursor = con.cursor()
result_row = cursor.execute(sql, (column_name, device_id))
query_result = cursor.fetchall()
cursor.close()
return jsonify({'result': query_result})
我希望如果我向 /test/1/name 提出请求 我会得到一个 JSON 对象:
{"result": ["John"]}
但是,我得到的是列名而不是列数据:
{"result": ["name"]}
我想知道是不是我的sql有问题,所以我使用了一个新的sql:
sql = "SELECT `name` FROM `table` WHERE `id` = 1"
result_row = cursor.execute(sql)
这一次它可以使用这个纯 sql,但是它失去了接收参数的能力。
所以我想知道我之前的代码sn-p中我的sql有什么问题?还是我搞砸了 execute() 方法?
【问题讨论】:
-
对DB不太了解,但我在代码片段中看到了1和“1”的区别。你可以试试:
@app.route('/test/<int:device_id>/<column_name>', ...吗?(在 id 中添加了int:) -
我试过了,但得到了相同的结果。最奇怪的是我为 url 指定的任何奇怪的
(例如 /test/1/asdfasdf),我仍然可以获得 {"result": ["asdfasdf"]} 的 JSON 结果。所以看来sql字符串在这里不起作用...