小编典典

使用Python访问具有可变列名的SQL

sql

我对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

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

谢谢你的帮助!


阅读 160

收藏
2021-04-22

共1个答案

小编典典

问题可能%s是列名称的使用。这意味着 SQL驱动程序 将在插值该变量时尝试转义该变量,包括引号,这不是您想要的,例如列名,表名等。

当在,等中使用 SELECTWHERE您确实想使用它%s来防止 SQL注入 并启用引号等等。

在这里,您只想使用纯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

2021-04-22