2012-01-18 31 views
2

pyodbcを使用してSQL Serverに接続するpythonコードから複数のクエリを作成します。pyodbcカーソル再利用

cursor = connection.connect(connection_string) 
qry1 = "Select * FROM Table1" 

rows = cursor.execute(qry1).fetchall() 

for row in rows: 
    qry2 = "Select * FROM Table2" 

    rows2 = cursor.execute(qry2).fetchall() 

    for row2 in rows2: 
     print row2 

これは正常に完了し、両方のクエリを正常に完了します。

どのように私はカーソルオブジェクトを再利用できますか?

私はrowsrows2は今、同じこと(オブジェクト)を指すであろうと

rows2 = cursor.execute(qry2).fetchall() 

を実行したとき、私は思うだろう。

EDIT:これはメモリにすべての行を読み取りますので、多数の行があるかどうpyodbcサイトからの有用な情報

、それは使用すべきではありません。代わりに行を反復することを検討してください。ただし、結果の行を処理する前に2番目のクエリを実行できるように、Cursorを解放すると便利です。

cursor info

+0

私はこの問題があります。ソリューションは正確には何ですか? –

答えて

1

私は.fetchall()はあなたがカーソルを再利用する可能性がある後、カーソルのクエリによって返されるすべての行を含む新しいリストを返すよう、あなたの最後の文は、偽だと思います。 (しかし、私は新しいカーソルのコストは、それらを再利用することを考える前に何をテストするだろう)[まあ、これは本当に真であるかわからないがdbapi互換sqlite3バインディングのためです]

+0

あなたが正しいように見えます。私はpyodbcサイトからの情報で私の質問を編集しました。ありがとう! –