У меня есть этот необработанный sql для моей модели Django:

cursor.execute('SELECT crowdfunding_offering.offering_name FROM crowdfunding_offering WHERE crowdfunding_offering.id = %d ORDER BY crowdfunding_offering.id DESC LIMIT 1', (int(self.offering.id),))

Что не работает. Я получаю эту ошибку:

Exception Value:    near "%": syntax error

Затем я пытаюсь изменить %d на %s, только тогда это работает. Я думал, что %d для числовых параметров, а %s для строк, но почему это не работает для %d?

Вот таблица, в которой идентификатор явно является целым числом:

enter image description here

0
Prosy Arceno 20 Май 2021 в 22:38

1 ответ

Лучший ответ

В необработанных SQL-запросах Django заполнители всегда %s, а не %d или что-то еще.

>>> Person.objects.raw('SELECT * FROM myapp_person WHERE last_name = %s', [lname])

Вы также можете использовать %(foo)s, если ваши параметры находятся в dict:

Person.objects.raw(
    'SELECT * FROM myapp_person WHERE last_name = %(lname)s',
    {"lname": lname},
)
4
AKX 20 Май 2021 в 19:40