Django: необработанные SQL-запросы с динамическим числом переменных - PullRequest
1 голос
/ 30 ноября 2011

Можно ли построить необработанные запросы SQL в Django, чтобы они принимали динамическое число аргументов? Так, например, скажем, что у меня есть следующая структура URL в моем приложении:

/books/category/history/
/books/category/history/1800s/

Для первого запроса я ищу все книги с ключевым словом "история", а для второго я ищу все книги с ключевым словом "история" И ключевым словом "1800s".

В настоящее время у меня есть два отдельных запроса для каждого из них:

keyword1 = 'history'
SELECT appname_book.name AS name FROM appname_book WHERE keyword=%s,[keyword1]

keyword1 = 'history'
keyword2 = '1800s'
SELECT appname_book.name AS name FROM appname_book WHERE keyword=%s AND keyword=%s,[keyword1, keyword2]

Кто-нибудь знает более чистый и эффективный способ сделать это?

Я использую Django 1.3 и MySQL.

Спасибо.

1 Ответ

2 голосов
/ 30 ноября 2011

Почему вы не используете Django QuerySet, например:

Book.objects.all().filter(keyword__in=['history','1800s']).values('name')

Другое возможное решение с использованием RAW SQL, может быть:

keywords = []
SQL = 'SELECT appname_book.name AS name FROM appname_book WHERE 1=1 '
SQL += ' '.join(['AND keyword=%s' for _ in params])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...