Где разместить операторы 'create_function' в Django - PullRequest
0 голосов
/ 25 сентября 2018

Я работаю над проектом со стандартным пакетом 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)
    ...
...