在Django中将“ create_function”语句放在何处

时间:2018-09-25 15:10:13

标签: python django sqlite django-2.1

我正在使用标准Django + SQLite捆绑包开发项目。 而且我遇到的情况是,Django querySet API甚至django'raw()'不足以让我从数据库中检索适当的信息。

因此,我直接执行自定义SQL来检索数据。另外,我还需要通过'create_function'接口定义'lower'函数,因为SQLite无法对unicode字段(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)
    ...

0 个答案:

没有答案