2

1 つのテーブルから多数のレコードを取得し、結果セットを反復処理し、返された行ごとに別のテーブルにクエリを実行するスクリプトで Python用のSnowflake コネクタ(Python データベース API v2 仕様のサポートを実装) を使用しています。結果が返される場合と返されない場合があります。

2 番目のクエリで結果が返されない場合、エラーがスローされなくても、最初のクエリで返された結果の繰り返しが停止します。

次のコードは、私が直面している問題を示しています...

cur = cnx.cursor()
foobars = cur.execute("SELECT * FROM foobar")
    for foobar in foobars:
        foobarId = foobar[0]

        # Iteration over foobars stops if no records are returned for the following 
        foobaz = cur.execute("SELECT * FROM foobaz WHERE foobarId = %s", (foobarId))
        if foobaz.rowcount != 0:
            # Iterate over foobaz here

例外がスローされた場合、エラーをキャプチャして次の結果に進むことで、このシナリオを処理できます。例外がスローされない場合、このシナリオをどのように処理しますか?

4

1 に答える 1

2

カーソルは、最後の SELECT の状態を格納します。したがって、並列 SELECT 用に新しいカーソルを作成する必要があります。

cur = cnx.cursor()
cur.execute("SELECT * FROM foobar")
for foobar in cur:
    foobarId = foobar[0]

    cur2 = cnx.cursor()
    cur2.execute("SELECT * FROM foobaz WHERE foobarId = %s", (foobarId,))
    for foobaz in cur2:
        # Iterate over foobaz here
于 2016-05-17T18:45:59.577 に答える