1

我对 Python(和一般编码)很陌生,并尝试了一个使用 pymysql 将我的代码链接到 MySQL 数据库的小项目。一般来说,一切都很顺利,但我很难用下面的函数找到变量列的最小值。

def findmin(column):
    cur = db.cursor()
    sql = "SELECT MIN(%s) FROM table"
    cur.execute(sql,column)
    mintup = cur.fetchone()

如果一切顺利,这将返回一个带有 min 的元组,例如 (1,)

但是问题是如果我运行该功能:

findmin(column_name)

我必须将列名放在“”(即“column_name”)中,否则 Python 将其视为未知变量。但是,如果我将引号放在 column_name 周围,那么 SQL 会看到

SELECT MIN("column_name") FROM table

它只返回列标题而不是值。有什么想法可以解决这个问题吗?

谢谢你的帮助!

4

1 回答 1

2

问题可能是%s用于列名。这意味着SQL 驱动程序将在插入该变量时尝试转义该变量,包括引用,这不是您想要的列名、表名等内容。

当使用 , 等中的SELECTWHERE您确实希望使用它%s来防止SQL 注入并启用引用等。

在这里,您只想使用纯 python 进行插值。这也意味着没有绑定元组传递给执行方法。

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

于 2014-07-15T02:37:26.750 回答