2010-02-06 2 views
1

Я пытаюсь выполнить запрос, как это:SQL LIKE в Django/Python

SELECT * 
FROM 
    MyTable 
WHERE 
    FirstName LIKE '%[user inputted value here]%' 
    OR 
    LastName LIKE '%[that same user inputted value]%' 
    AND 
    UserID = some number 

При запуске запроса с помощью cursor.execute(), введенные значения будут спасся и цитировал, который вызывает неправильный запрос для запуска. Есть ли способ предотвратить цитирование пользователем введенных значений?

Я бы предпочел решение, не использующее ORM Django, поскольку фактический запрос намного сложнее моего примера.

+0

Это MySQLdb? Можете ли вы показать нам, что вы подразумеваете под «бегством и цитированием»? –

+0

Какой запрос? Есть хороший шанс, что это можно сделать с помощью ORM ... – Zach

ответ

2

Используйте foo__contains=realvaluehere в ваших запросах.

0

Хм, похоже, я переоценил escapy-ness API. Это работает именно так, как я хочу это

# add wildcards to query, these are **not** escaped 
q = "%" + q + "%" 
cursor = connection.cursor() 
cursor.execute("SELECT * 
       FROM MyTable 
       WHERE 
        LastName LIKE %s 
        AND 
        FirstName LIKE %s 
        AND 
        UserID = %s", [q, q, user_id]) 
results = cursor.fetchall()