このドキュメントの Django のバージョンにはセキュリティ上の脆弱性があるため、すでにサポートが終了されています。新しいバージョンにアップグレードしてください!最新の Django のバージョンのドキュメントはこちら

Django v1.0 documentation

SQL クエリの直接実行

revision-up-to:8961 (1.0)

自作のモデルメソッドやモジュールレベルのメソッドでは、自由にカスタムの SQL 文を書けます。 django.db.connection というオブジェクトが現在のデータベー ス接続を表現しています。カスタムSQL を使うには、まず connection.cursor() を呼び出してカーソルオブジェクトを取得し、次いで cursor.execute(sql, [params]) を呼び出して SQL を実行した後、 cursor.fetchone()cursor.fetchall() を読んで結果行を返します。例 えば:

def my_custom_sql(self):
    from django.db import connection
    cursor = connection.cursor()
    cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])
    row = cursor.fetchone()
    return row

connectioncursor は標準の Python DB-API が提供する機能の (トランザクションの扱い を除いた) ほとんど を実装しています。 Python DB-API に詳しくないのなら、上の SQL 文の cursor.execute() でパラメタを直接 SQL に入れるのではなく、プレースホル ダ "%s" を使っていることに注意して下さい。このテクニックを使うと、根底 にあるデータベースライブラリは必要に応じて自動的にパラメタをクオートしたり エスケープ処理したりします。 (また、Django はプレースホルダ文字として SQLite の Python バインディングが使っている "?" ではなく "%s" を使うので注意してください。これはインタフェースに一貫性をもたせるための設 計です。)

注意: WHERE 節を自分で設定したいだけなら、標準の照合 API に wheretablesparams といった引数を指定して実現できます。