#mysql #django #django-models
#mysql #django #django-модели
Вопрос:
Я передаю несколько параметров в необработанный оператор sql, для каждого параметра я использую %s, Возможно ли использовать имя переменной вместо нескольких %s
Пример:
man = "John"
wife = "Jane"
query = "SELECT * FROM person WHERE name = %s and wife = %s"
cursor.execute(query, [man, wife])
Комментарии:
1. Я действительно не понимаю, почему это связано с Django, если вы используете raw DB API
Ответ №1:
Вы запрашиваете модель?
Просматриваю документы, объясняющие менеджер raw()
raw() automatically maps fields in the query to fields on the model.
это должно быть так просто, как:
Person.objects.raw('SELECT id, first_name, last_name, birth_date FROM myapp_person')
Комментарии:
1. Таблица, к которой я делаю запрос, содержит сотни тысяч строк. Для повышения эффективности я хотел бы быть более конкретным в своих запросах. Есть идеи?
2. Также я работаю с несколькими базами данных, некоторые из которых не подходят для моделей Django, поэтому я запрашиваю db напрямую
Ответ №2:
DB API 2.0 определяет следующие стили параметров
'qmark'
Стиль вопросительного знака, например'...WHERE name=?'
'numeric'
Числовой, позиционный стиль, например'...WHERE name=:1'
'named'
Именованный стиль, например'...WHERE name=:name'
'format'
Коды формата ANSI C printf, например'...WHERE name=%s'
'pyformat'
Коды расширенного формата Python, например'...WHERE name=%(name)s'
Теперь не все базы данных реализуют их все. Проверьте, поддерживает ли используемый вами движок базы данных pyformat
.