#python #django #mysql-python
Вопрос:
Я хочу включить строку в качестве запроса, и строка будет содержать пробелы, поэтому мне нужно будет использовать кавычки.
Но это дает мне ошибку, что он ожидает другого параметра.
ModelName.objects.raw("select * from tablename where city='%s' and state=%s",params=['San francisco', 'Los Angeles'])
Это ошибка, которая возникает
error: Incorrect number of bindings supplied. The current statement uses 1, and there are 2 supplied.
Комментарии:
1. Почему вы используете
'%s'
? Документация явно не рекомендует этого делать…
Ответ №1:
В разделе Передача параметров в raw() документация явно предупреждает о том, чтобы не ставить кавычки вокруг %s
(т. Е. Писать это как '%s'
), а также заявляет, что это сделает вас уязвимыми для внедрения SQL. Двигаясь дальше, не должно иметь значения, что ваша строка содержит пробелы, %s
они не используются для форматирования строк, скорее они позже заменяются ?
Django и используются для выполнения запроса с использованием подготовленных операторов.
Следовательно, ваш запрос будет просто работать, если вы напишете:
ModelName.objects.raw("select * from tablename where city=%s and state=%s",params=['San francisco', 'Los Angeles'])
Кроме того, для этого вам даже не нужны необработанные запросы. Вы можете просто написать что-то вроде следующего, что было бы эквивалентно:
ModelName.objects.filter(city='San francisco', state='Los Angeles')
Комментарии:
1. Я исключаю кавычки, это не сработало, хотя и не показало никакой ошибки. Но запрос не дал никакого результата. Что мне делать?
2. @SMev Действительно ли в вашей таблице есть строка, в которой столбец
state
имеет значение"Los Angeles"
? И действительно ли в вашей таблице есть строка, в которой столбецcity
имеет значение"San francisco"
с небольшим f? Если нет, это объяснило бы отсутствие результатов.3.@SMev, как указано BoarGules, проверьте это. Также он может быть сохранен как
San Francisco
с большой буквыF
в базе данных, в вашем запросе вы написали небольшойf
.