Как я могу отформатировать строки для запроса с MySQL в Python? - PullRequest
6 голосов
/ 29 марта 2010

Как мне сделать это правильно:

Я хочу сделать запрос, подобный этому:

<code>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 не правильно вводит строки. Это помещает две замены в кавычки вокруг них.

Так что это заканчивается как:

<code>ORDER BY 'somecol' 'DESC'

Что не так должно быть:

<code>ORDER BY somecol DESC

Любая помощь с благодарностью!

Ответы [ 4 ]

6 голосов
/ 29 марта 2010

% s заполнители внутри строки запроса зарезервированы для параметров. % s в 'order by% s% s' не являются параметрами. Вы должны создать строку запроса в 2 этапа:

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-инъекций

0 голосов
/ 29 марта 2010

Вы можете попробовать это альтернативно ...

query = """SELECT * FROM sometable 
                    order by {0} {1} 
                    limit {2}, {3};"""

sortname = 'somecol'
sortorder = 'DESC'
limit1 = 'limit1'
limit2 = 'limit2'

print(query.format(sortname, sortorder, limit1, limit2))
0 голосов
/ 29 марта 2010

Не все части SQL-запроса могут быть параметризованы. Ключевое слово DESC, например, не параметр. Попробуйте

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

cur.execute(query, (sortname, limit1, limit2) ) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...