我在一个脚本中使用Snowflake Connector for Python(它实现了对Python Database 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
如果抛出异常,我可以通过捕获错误并转到下一个结果来处理这种情况。如果没有抛出异常,如何处理这种情况?
光标存储上一次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