2

我在一个脚本中使用适用于 Python 的 Snowflake 连接器(它实现了对 Python 数据库 API v2 规范的支持),该脚本从一个表中提取许多记录,迭代结果集,并且对于返回的每一行,查询另一个表可能会或可能不会返回任何结果。

如果第二个查询没有返回任何结果,则对第一个查询返回的结果的迭代将停止,即使没有引发错误。

以下代码演示了我遇到的问题......

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 回答