2009-03-06 10 views
2

djangoでカスタムSQLクエリを実行し、クエリ結果をオブジェクトに変換する必要があるたびに、どのように仲間Slackersはこれに対処するのだろうか。たぶん誰かがDjangoのカスタムSQLを扱うためのライブラリを書いていたのでしょうか?Django ORMでraw SQLを実行しやすくするためのツール

答えて

3

問題は「手動でクエリ結果をオブジェクトに変換する」ため、最も簡単な解決策は、カスタムSQLを純粋なSQLクエリではなくORM .extra()呼び出しに適合させるかどうかを確認することです。それはしばしば可能です。そして、ORMにオブジェクトを構築するすべての作業をいつものようにさせます。

4

あなたが探しているものを正確にわからないが、あなたは常にthe docsあたりのカスタムSQLを実行するためにモデルにメソッドを追加することができます。

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 

より汎用的なものについては、関数を定義abstract base modelを作成しますそのような "sql"パラメータを使用します。

+0

+1:モデルのもう1つの方法。ニース。 –

4

最新開発版(未来1.2)は、そのお手伝いをするために()メソッドを持っていた.raw:

Person.objects.raw('SELECT * FROM myapp_person') 

詳しい情報はhttp://docs.djangoproject.com/en/dev/topics/db/sql/の下に見つけることができます。

関連する問題