首页 > 解决方案 > 在 Django 中放置“create_function”语句的位置

问题描述

我正在开发一个带有标准 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)
    ...

标签: pythondjangosqlitedjango-2.1

解决方案


推荐阅读