2014-12-04 6 views
2

У меня есть MySQL-запрос в Python с использованием MySQLdb, который я хочу дать мне другое количество строк в зависимости от наличия или отсутствия LIMIT.Объединить строку с другой, которая содержит переменную

Так, что-то вроде:

sql = "SELECT URL, Name AS Category 
     FROM sitelist sl 
     INNER JOIN sitecategory sc ON sc.PlacementCategory_id = sl.Category_id " 
if limit > 0 : 
    sql += "LIMIT %s", (limit) 

Однако это не удается:

TypeError: cannot concatenate 'str' and 'tuple' objects 

Как я смог бы объединить строку, содержащую limit номер при сохранении запроса 'безопасной'? В случае вышеприведенной является отдельной строкой, приведенное выше работает правильно.

В PHP я бы просто использовал подготовленную инструкцию PDO с bindparam(), но я не могу найти ничего подобного в Python.

+0

В вашем случае: используйте '' LIMIT% d "% limit'! –

+0

Это безопасно использовать в SQL-запросе? Я видел некоторые другие ответы и результаты, которые указывали, что это не так. – user991710

+1

'% d' ограничено целыми числами, в них нет вредоносного символа. Вы не должны использовать '% s'. –

ответ

1

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

sql = ("SELECT URL, Name AS Category " 
     "FROM sitelist sl " 
     "INNER JOIN sitecategory sc ON sc.PlacementCategory_id = sl.Category_id") 

if limit > 0: 
    whatever.execute(sql+" LIMIT %s", (limit,)) 
else: 
    whatever.execute(sql) 

Обратите внимание, что: sql должны иметь открывающие и закрывающие кавычки на каждую строке; и limit должен быть в кортеже в качестве аргумента execute.

-1

использование string формат.

sql = "SELECT URL, Name AS Category\n\ 
    FROM sitelist sl\n\ 
    INNER JOIN sitecategory sc ON sc.PlacementCategory_id = sl.Category_id " 
if limit > 0: # you don't need parenthesis in python 
    sql += "LIMIT {}" .format(limit) 

или использовать format specifier.

sql = "SELECT URL, Name AS Category\n\ 
     FROM sitelist sl\n\ 
     INNER JOIN sitecategory sc ON sc.PlacementCategory_id = sl.Category_id " 
if(limit > 0): 
    sql += "LIMIT %d" %limit 
+0

ОП определенно о том, что нужно держать запрос в безопасности, что интерполирует значение 'limit' (которое может быть что угодно) не делает – jonrsharpe

+0

@jonrsharpe Я думаю, что запрос сейчас безопасен. –

Смежные вопросы