我正在使用标准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)
...