如何在Python中格式化字符串以查询mysqldb?
我该怎么正确地做这个:
我想执行一个这样的查询:
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()
一切都正常,但“order by %s %s”这个部分没有正确排序字符串。它把两个替换的内容都加上了引号。
所以最后变成了这样:
ORDER BY 'somecol' 'DESC'
这是错误的,应该是:
ORDER BY somecol DESC
非常感谢任何帮助!
4 个回答
0
并不是SQL查询的所有部分都可以用参数来替代。比如,DESC这个关键词就不能作为参数。你可以试试
query = """SELECT * FROM sometable
order by %s """ + sortorder + """
limit %s, %s"""
cur.execute(query, (sortname, limit1, limit2) )
6
在查询字符串中,%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 注入的风险。