如何在Python中格式化字符串以使用mysqldb进行查询?

2024-09-28 17:22:05 发布

您现在位置:Python中文网/ 问答频道 /正文

如何正确执行此操作:

我想做这样的查询:

query = """SELECT * FROM sometable 
                    order by %s %s 
                    limit %s, %s;"""
conn = app_globals.pool.connection()
cur = conn.cursor()
cur.execute(query, (sortname, sortorder, limit1, limit2) ) 
results = cur.fetchall()

所有操作都正常,但%s%s的顺序没有将字符串正确放入。这是把这两个替换词加上引号。

结果是:

ORDER BY 'somecol' 'DESC'

错误的应该是:

ORDER BY somecol DESC

非常感谢您的帮助!


Tags: fromappbyorderconnqueryselectdesc
3条回答

不是SQL查询的所有部分都可以参数化。例如,DESC关键字不是 一个参数。试试看

query = """SELECT * FROM sometable 
                    order by %s """ + sortorder + """
                    limit %s, %s"""

cur.execute(query, (sortname, limit1, limit2) ) 

查询字符串中的%s占位符是为参数保留的。%“order by%s%s”中的s不是参数。您应该在两个步骤中生成查询字符串:

query = """SELECT * FROM sometable order by %s %s limit %%s, %%s;"""
query = query % ('somecol', 'DESC')
conn = app_globals.pool.connection()
cur = conn.cursor()
cur.execute(query, (limit1, limit2) ) 
results = cur.fetchall()

不要忘记过滤第一个替换以防止SQL注入的可能性

相关问题 更多 >