2016-06-30 18 views
0

Djangoビュー内のカーソル・データ型の説明を取得できますか?
生のSQLを実行すると、cursor().descriptionを呼び出して説明を取得できますが、実行するとcursor().callfunc('oracleTestFunc',cx_Oracle.CURSOR,)
(oracleTestFuncはカーソルを返します) フィールドの説明を取得できません。だから問題はdescriptionを得ることです。私はそれをどのように実装できますか?Django cx_Oracle connection.cursor()。oracleカーソル・データ型の説明

UPDATE

は私のOracle関数は、私はこの方法が

cursor = connection.cursor() 
results=cursor.callfunc('test_cl.ret_proc_run',cx_Oracle.CURSOR,) 

それでは、私がやりたいことは、個々のフィールドへのアクセスを取得することです、それを呼び出してDjangoのビューで

create or replace package body test_cl is 

function ret_proc_run return sys_refcursor is 
    retval sys_refcursor; 
begin 

open retval for 
    select id_proc,inst_id,run_now from proc_run; 

return retval; 
end; 

end test_cl; 

です後でoracle関数(それらはid_procinst_idrun_nowです)によって戻され、テンプレートで使用されます。
私はそれがcursor.descriptionメソッドによって可能になると考えましたが、ドキュメントをさらに読んだ後、カーソルデータ型の場合はnoneが返されるため、そうすることはできません。

+0

関数から返されたカーソルから説明を取得する方法を尋ねていますか? –

+0

カーソルの説明機能を呼び出したい。私はそれを私はカーソルの場合には何も得ないが、私はそれを記述メソッドを呼び出すことができますビューで生のSQLクエリを実行するとき。 – arminrock

+0

Djangoは物事を少し包み込みます。 CX_Oracleを直接試して、Djangoの外でうまく動作しているかどうかを確認することができます。 Django内からraw cx_Oracle接続を取得できます。必要ならコードを追跡することができます。お知らせ下さい。 –

答えて

1

はい、cursor.descriptionは正しい属性ですが、質問の説明から間違ったカーソルが見つかっています。関数から返されたカーソル(あなたのケースでは "results")を使用する必要があります。他のカーソル(ストアドプロシージャを呼び出したもの)は、クエリを実行しなかったため、期待通りにNoneを返します。

あなたは次の操作を行うことができます(ジャンゴによってアンラップ)生cx_Oracleカーソルで取得する必要がある場合:

from django.db import connection 
connection.cursor() 
rawCursor = connection.connection.cursor() 

二行目は、接続が実際に確立されていることを保証します。最後の行は未加工の接続を取得し、それを使用してカーソルを作成します。

+0

あなたのヒントは、 '' cursor''に '' description''を呼んではいけないということはとても役に立ちました。私は '' res = results.fetchall() ''を追加してから、 '' res.description''にアクセスしました。ありがとうございました。 – arminrock

+0

よろしくお願いいたします。これを正解とマークできますか? –

関連する問題