我对Python(和一般的编码)很陌生,并尝试了一个小项目,该项目使用pymysql将我的代码链接到MySQL数据库。总的来说,一切都进行得很顺利,但是我很难使用以下函数来查找变量列的最小值。
def findmin(column): cur = db.cursor() sql = "SELECT MIN(%s) FROM table" cur.execute(sql,column) mintup = cur.fetchone()
如果一切顺利,这将使我得到一个带有最小值的元组,例如(1,)
但是问题是如果我运行该功能:
findmin(column_name)
我必须将列名放在“”(即“ column_name”)中,否则Python会将其视为未知变量。但是,如果我将引号放在column_name周围,则SQL会看到
SELECT MIN("column_name") FROM table
只是返回列标题而不是值。有什么想法可以解决这个问题吗?
谢谢你的帮助!
问题可能%s是列名称的使用。这意味着 SQL驱动程序 将在插值该变量时尝试转义该变量,包括引号,这不是您想要的,例如列名,表名等。
%s
当在,等中使用 值 时SELECT,WHERE您确实想使用它%s来防止 SQL注入 并启用引号等等。
SELECT
WHERE
在这里,您只想使用纯python进行插值。这也意味着没有绑定元组传递给execute方法。
def findmin(column): cur = db.cursor() sql = "SELECT MIN({0}) FROM table".format(column) cur.execute(sql) mintup = cur.fetchone()
SQL小提琴显示了SQL的工作方式:
http://sqlfiddle.com/#!2/e70a41/1