我对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
只返回列标题而不是值。 我有什么想法可以解决这个问题吗?
感谢您的帮助!
答案 0 :(得分:1)
问题可能是使用%s
作为列名。这意味着 SQL驱动程序将在插入时尝试转义该变量,包括引用,这不是您想要的列名,表名等内容。
在SELECT
,WHERE
等中使用值时,您确实希望使用%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小提示: