跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • django ORM 使用 sql 函数怎么写表达式?
未分類
1 11 月 2020

django ORM 使用 sql 函数怎么写表达式?

django ORM 使用 sql 函数怎么写表达式?

資深大佬 : wuwukai007 3

比如

sql = select * from book where left(‘name’,1)!=’z’

用 orm 我目前只能想到

book.objects.extra(where=["left('name',1)!='z' "]) 

或者

from django.db.mdels.functions import Left  book.objects.annotate(name_left=Left('name',1)).filter(~Q(name_left='z')) 

第一种要写原生 sql,第二种不写原生 sql,但是 白白加了一个 name_left 字段, 有没有这种使用了 sql 函数,还能做判断的 ,通过 ORM 写出来的

大佬有話說 (6)

  • 資深大佬 : nonduality

    对于你这个情形,用 book.objects.exclude(name__startswith=’z’)就可以实现

  • 主 資深大佬 : wuwukai007

    @nonduality left 只是举个例子,实际情况里面可能用别的函数 instr 等,只是想探讨下 对于这种 带函数的,能不能 写出表达式,!= ,= 。

  • 資深大佬 : freakxx

    Custom Lookups
    https://docs.djangoproject.com/zh-hans/3.1/howto/custom-lookups/

    直接定义个新的规则就 ok

  • 主 資深大佬 : wuwukai007

    @freakxx orm 还可以自定义规则,看来还是文档看的不够细,多谢

  • 資深大佬 : freakxx

    @wuwukai007 #4

    这个实现还是挺骚气的,

    你提的点我也刚才也去看能不能实现,
    实际上可以想办法做成 substrwith 这样的东西,但官方好像不支持动态名字,
    比如 substrwith__<int> 来动态改变,

    所以你可以考虑先做个比较简单的,比如 stat 呀,end 之类还是比较简单的

    关于 django,drf 的,文档和源码之前也都撸过,
    如果一般提问没思路,也可以 at 我,我还是挺喜欢各种 pythonic 的实现

  • 資深大佬 : freakxx

    对应源码可以去
    django/db/models/lookups.py

    https://github.com/django/django/blob/master/django/db/models/lookups.py

    看看,依瓢画葫芦还是挺简单的事。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具