Djangoで生のクエリを実行したい場合はraw()を使えば簡単に実現できるみたい。
参考:Performing raw SQL queries
サンプルModel
models/users.py
import django.db from models
class Users(models.Model):
name = models.CharField()
age = models.IntegerField()
sex = models.CharField()
SQLを指定してデータ取得
usersテーブルの年齢が40以上のユーザーを取得する場合
sql = "SELECT * FROM users WHERE age >= 40"
users = Users.objects.raw(sql)
下記と同じ結果となります。
users = Users.objects.filter(age__gte=40)
パラメーターを指定
パラメーターを指定して実行することもできます。
sql = "SELECT * FROM users WHERE age >= %s"
users = Users.objects.raw(sql, [40])
辞書型で指定する場合。上記だと、複数のパラメーターがあったときに何個目がどの値だっけ?とわかりにくくなるので、下記がおすすめ。
sql = "SELECT * FROM users WHERE age >= %(age)s AND sex = %(sex)s"
params = {"age": 40, "sex": "male"}
users = Users.objects.raw(sql, params)