Python 数据库 API v2 > 如果在迭代期间执行查询 returns 没有结果,则对结果集的迭代停止
Python Database API v2 > Iteration over result set stops if a query executed during the iteration returns no results
我在脚本中使用 Snowflake Connector for Python(实现了对 Python 数据库 API v2 规范的支持),该脚本从一个 table,遍历结果集,并且对于每一行 returned,查询另一个 table 可能会或可能不会 return 任何结果。
如果没有为辅助查询 return 编辑结果,则对第一个查询 return 编辑的结果的迭代停止,即使没有抛出错误。
以下代码演示了我 运行 遇到的问题...
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
我在脚本中使用 Snowflake Connector for Python(实现了对 Python 数据库 API v2 规范的支持),该脚本从一个 table,遍历结果集,并且对于每一行 returned,查询另一个 table 可能会或可能不会 return 任何结果。
如果没有为辅助查询 return 编辑结果,则对第一个查询 return 编辑的结果的迭代停止,即使没有抛出错误。
以下代码演示了我 运行 遇到的问题...
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