我想用一個WHERE
條款這樣在Django ORM查詢數據庫:如何使用Django ORM使用數據庫函數進行查詢?
WHERE LOWER(col_name) = %s
或
WHERE LOWER(col_name) = LOWER(%s)
我怎樣才能做到這一點使用查詢集API?
我想用一個WHERE
條款這樣在Django ORM查詢數據庫:如何使用Django ORM使用數據庫函數進行查詢?
WHERE LOWER(col_name) = %s
或
WHERE LOWER(col_name) = LOWER(%s)
我怎樣才能做到這一點使用查詢集API?
您可以使用extra
添加自定義的,其中使用條件SQL函數:
Author.objects.extra(where=["lower(name) = lower(%s)"], params=['Fabio'])
你想改用直接在查詢中嵌入的價值PARAMS通過讓Django的逃脫了PARAMS避免SQL注入您。
如果你能避免使用您傳遞(在我的例子「法比奧」)帕拉姆的SQL LOWER
功能,那麼你可以使用annotate
代替:
Author.objects.annotate(name_lower=Lower('name')).filter(name_lower=your_name.lower())
注意your_name.lower()
使用蟒蛇lower
功能,而不是SQL的。
我無法找到一個方法來一起使用註釋與F()
或Lower()
(from django.db.models.functions import Lower
)申請Lower
到您的自定義輸入,而不是另一個字段。
爲什麼不簡單使用'__iexact'來區分大小寫比較呢? – Selcuk
我有一個關於'LOWER(col_name)'的索引。 – planetp