Django: создание необработанного SQL-запроса, передача нескольких / повторных параметров? - PullRequest
8 голосов
/ 31 мая 2010

Надеюсь, это будет довольно простой вопрос, я просто не знаю достаточно о Python и Django, чтобы ответить на него.

У меня есть необработанный SQL-запрос в Django, который принимает шесть различных параметров, первые два из которых (centreLat и centreLng) повторяются:

query = "SELECT units, (SQRT(((lat-%s)*(lat-%s)) + ((lng-%s)*(lng-%s)))) AS distance FROM places WHERE lat<%s AND lat>%s AND lon<%s AND lon>%s ORDER BY distance;"
params = [centreLat,centreLng,swLat,neLat,swLng,neLng]
places = Place.objects.raw(query, params)

Как мне структурировать объект params и строку query, чтобы они знали, какие параметры повторять и где?

1 Ответ

12 голосов
/ 31 мая 2010

У вас есть (как минимум) два варианта. Вы можете включить эти повторяющиеся параметры в свой список в том порядке, в котором они должны отображаться - это означает, что в результате вы получите одинаковые значения в своем списке несколько раз, например:

params = [centreLat,centreLng,swLat,neLat,swLng,neLng,centreLat,centreLng]

ИЛИ, вы можете назвать каждый параметр, используя словарь, и вместо "% s" вы можете использовать "% (name) s", например:

query = "SELECT units, (SQRT(((lat-%(lat)s)*(lat-%(lat)s)) + ((lng-%(lng)s)*(lng-%(lng)s)))) AS distance FROM places WHERE lat<%(lat)s AND lat>%(lat)s AND lon<%(lng)s AND lon>%(lng)s ORDER BY distance;"
params = {'lat':centreLat,'lng':centreLng}

(не копируйте этот код дословно, я уверен, что это НЕ именно то, что вам нужно)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...