本文介紹 django.db.models.expressions.RawSQL
的用法。
聲明
class RawSQL(sql, params, output_field=None)
有時數據庫表達式無法輕鬆表達複雜的WHERE
子句。在這些邊情況下,請使用 RawSQL
表達式。例如:
>>> from django.db.models.expressions import RawSQL
>>> queryset.annotate(val=RawSQL("select col from sometable where othercol = %s", (param,)))
這些額外的查找可能無法移植到不同的數據庫引擎(因為您正在顯式編寫 SQL 代碼)並且違反 DRY 原則,因此您應該盡可能避免它們。
RawSQL
表達式也可以用作__in
過濾器的目標:
>>> queryset.filter(id__in=RawSQL("select id from sometable where col = %s", (param,)))
警告
為了防止 SQL injection attacks ,您必須轉義用戶可以使用 params
控製的任何參數。 params
是強製您承認您沒有使用用戶提供的數據插入 SQL 的必需參數。
您也不能在 SQL 字符串中引用占位符。由於 %s
周圍的引號,此示例易受 SQL 注入攻擊:
RawSQL("select col from sometable where othercol = '%s'") # unsafe!
您可以閱讀有關 Django 的 SQL 注入保護如何工作的更多信息。
相關用法
- Python Django RandomUUID用法及代碼示例
- Python Random.Choices()用法及代碼示例
- Python Django Radians用法及代碼示例
- Python Django RadioSelect用法及代碼示例
- Python Django RangeOperators用法及代碼示例
- Python PIL RankFilter()用法及代碼示例
- Python Django Response.json用法及代碼示例
- Python Django Repeat用法及代碼示例
- Python Django RelatedManager.set用法及代碼示例
- Python RLock acquire()用法及代碼示例
- Python Django RelatedManager.remove用法及代碼示例
- Python Django RequestContext用法及代碼示例
- Python Django Reverse用法及代碼示例
- Python Django REQUIRED_FIELDS用法及代碼示例
- Python Django Redirect用法及代碼示例
- Python Django RelatedManager.clear用法及代碼示例
- Python Django Right用法及代碼示例
- Python Django RelatedManager.create用法及代碼示例
- Python RLock release()用法及代碼示例
- Python Django RelatedManager.add用法及代碼示例
- Python Django Response.resolver_match用法及代碼示例
- Python Django Response.context用法及代碼示例
- Python Django RedirectView用法及代碼示例
- Python Django Round用法及代碼示例
- Python Django RequireDebugFalse用法及代碼示例
注:本文由純淨天空篩選整理自djangoproject.com大神的英文原創作品 django.db.models.expressions.RawSQL。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。