2016-05-17 26 views
1

我在一个脚本中使用Snowflake Connector for Python(它实现了对Python数据库API v2规范的支持),该脚本将一系列记录从一个表中遍历结果集,并对返回的每一行查询另一个可能返回任何结果的表,或者可能不返回任何结果。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 

如果有异常被抛出,我可以通过捕获错误和移动到下一个结果处理这种情况。鉴于没有例外情况发生,人们将如何处理这种情况?

回答

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 
+0

啊!我应该已经意识到......感谢你的帮助,丹尼尔! –