python - 在 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)
...
解决方案
推荐阅读
- javascript - WebGL“画一个正方形”程序,需要帮助调试它
- visual-studio-code - 无法着色发送到 VS Code 调试控制台的输出
- bazel - 在 bazel 项目中使用大型非 bazel 依赖项
- html - 溢出时内面板高度不是 100%
- java - 嗨,我已经开发了天气应用程序,但是当我无法获得天气图标时?
- php - 在 Oracle RightNow 的元描述标记中使用 rn:page_title
- docker - 容器获取连接被拒绝
- javascript - 如果同一页面上有两个表单,我该如何区分错误。Laravel/jQuery
- excel - 如何在单元格中使用逗号分隔值作为公式中的参数(特别是数据透视表)?
- c# - 对象列表的确定性排序