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