Django: используйте имена переменных вместо %s

#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 .