为什么pymysql cursor.execute()得到不同的结果?

时间:2018-03-28 03:58:45

标签: python pymysql

在我的烧瓶应用程序(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()

顺便说一下,我的桌子就像:

  

==============================

     

id |名字|年龄

     

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,但它失去了接收参数的能力。

所以我想知道我之前的代码片段中的sql有什么问题?或者我可能搞乱了execute()方法?

1 个答案:

答案 0 :(得分:0)

你得到结果“name”,因为正在运行的sql是:

SELECT "name" FROM `table` WHERE `id` = 1

注意“名字”,而不是“名字”

你可以得到你想要的结果:

sql = "SELECT * FROM `table` WHERE `id` = %s"
cursor = con.cursor()
result_row = cursor.execute(sql, (device_id))
query_result = cursor.fetchall()
for row in query_result:
  print row[column_name]