使用Python以可变列名访问SQL

时间:2014-07-15 02:18:22

标签: python mysql sql pymysql

我对Python(以及一般编码)很陌生并尝试使用pymysql将我的代码链接到MySQL数据库的小项目。总的来说,一切都进展顺利,但我在查找变量列的min时遇到以下函数有困难。

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

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

感谢您的帮助!

1 个答案:

答案 0 :(得分: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