如何在Python中使用mysqldb格式化字符串?

Dan*_*iel 6 python mysql string

我该如何正确地做到这一点:

我想做这样的查询:

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

任何帮助非常感谢!

Yar*_*lav 6

查询字符串中的%s占位符是为参数保留的.'%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()
Run Code Online (Sandbox Code Playgroud)

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