Я работаю над проектом со стандартным пакетом Django + SQLite.И я столкнулся с ситуацией, когда Django querySet API и даже django 'raw ()' мне недостаточно для получения соответствующей информации из базы данных.
Поэтому я выполняю собственный SQL-запрос напрямую для получения данных.Также мне нужно определить «нижнюю» функцию через интерфейс «create_function», потому что SQLite не может выполнять сортировку без учета регистра для поля Юникод (https://www.sqlite.org/faq.html#q18).
Мой вопрос: куда мне поместить эту функцию 'create_function'оператор? Нормально ли поместить его непосредственно в представление django, чтобы оно выполнялось каждый раз при загрузке представления, или я должен поместить его где-нибудь еще, где оно будет выполнено только один раз?
from django.db import connection
def lower(text):
if text:
return text.lower()
else:
return text
def my_view(request):
...
with connection.cursor() as cursor:
if (connection.vendor == 'sqlite'):
connection.connection.create_function('lower', 1, lower)
cursor.execute('SELECT * FROM <my complicated select using lower>;')
data = dictfetchall(cursor)
...