2016-04-20 28 views
2

に取り込まれていない私は、次のコードをしている:ストアドプロシージャが正しく実行されたものの、残念ながら私の出力パラメータは、フィールドのIDと出力パラメータが

conn = pymssql.connect(server, user, password, database) 
cursor = conn.cursor() 

id_new_field = pymssql.output(int) 

res = cursor.callproc('NewField', ('Test',id_new_field)) 
conn.commit() 
conn.close() 

print(id_new_field.value) 
print(res) 

移入されません。出力は常に 'なし'です。

私の問題は、私の例では自動コミットistがfalseに設定されていると思います。

しかし、ストアドプロシージャがトランザクション内で実行されていないときにストアドプロシージャがエラーを起こしているため、autocommitをtrueに設定できません(ベンダーSPでSPを変更できません)。

私の仕事の今は、.callproc()の代わりに.execute()を使用し、raw sqlを自分のpythonスクリプトに書き込むことです。それはひどいです。 ;)

.callproc()にautocommit = falseを使用する可能性はありますか?

それとも完全に違うのですか?

答えて

0

私は

print(id_new_field.value) 

をしたとき、私はまたNoneを得たが、私は単純にresタプルにインデックスを付けることで値を取得することができました:

print(res[1]) 

(Pythonの2.7.11でテストし、 pymssql 2.1.1)

+0

私のために働いていません。私はPython 3.5.1とpymssql 2.1.2を使用しています。正確には:それは1回だけ働いた。私も 'print(res)'で試してみました。私は初めて新しいフィールドのIDを取得しましたが、スクリプトを2回実行すると、結果は再び「なし」になりました。 – st4rbuck

+0

実行しているストアドプロシージャに固有のものが必要です。確かに一般的な質問に対する答え* ".callproc()をautocommit = falseで使用する機会はありますか?" *は "はい"です。回避策として使用しているSQLコードは表示していないので、同じ結果を得るためにPythonコードが何をすることができるか分からない。 –

+0

@ stefan2342xx - 私は、同じスクリプトで '.commit()'を使わずにSPを2回呼び出した場合でも、Python 3.5.1とpymssql 2.1.2で私のために働いていました。あなたの問題が何であれ、それは自動コミットが原因ではないように見えます。 –

0

私はこのバグを見つけました。それはコンピュータの前に座っています...

関連する問題