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
connection や cursor は標準の Python DB-API が提供する機能の (トランザクションの扱い を除いた) ほとんど を実装しています。 Python DB-API に詳しくないのなら、上の SQL 文の cursor.execute() でパラメタを直接 SQL に入れるのではなく、プレースホル ダ "%s" を使っていることに注意して下さい。このテクニックを使うと、根底 にあるデータベースライブラリは必要に応じて自動的にパラメタをクオートしたり エスケープ処理したりします。 (また、Django はプレースホルダ文字として SQLite の Python バインディングが使っている "?" ではなく "%s" を使うので注意してください。これはインタフェースに一貫性をもたせるための設 計です。)
注意: WHERE 節を自分で設定したいだけなら、標準の照合 API に where や tables 、 params といった引数を指定して実現できます。
Aug 31, 2012