嵌套for循环与游标只获得python上的第一个所需结果

时间:2014-12-20 21:34:24

标签: python python-3.x nested-loops pypyodbc

我有以下一段代码我一直在努力,我只能为“输入”表的第一行做技巧。我知道嵌套循环上的两个游标之间显然没有任何关系,但我尝试了嵌套的while-for循环并获得了相同的结果。我正在使用python 3.4。

这个想法是将表输入中的行与表comparetable中的行进行比较,如果公式给出的结果小于5,则打印给定表的对应ID(row [0]& rowx [0])和公式的结果在一个名为output的新的不同表中。问题是它只适用于输入表的第一个记录。

db_connection = pypyodbc.connect(connection_str)
db_connection2 = pypyodbc.connect(connection_str)
db_connection3 = pypyodbc.connect(connection_str)

db_cursor = db_connection.cursor()
db_cursor2 = db_connection2.cursor()
db_cursor3 = db_connection3.cursor()

db_cursor.execute("SELECT * FROM input")
db_cursor2.execute("SELECT * FROM comparetable")

for row in db_cursor:
    for rowx in db_cursor2:
        idoriginal = row[0]
        idcomparable = rowx[0]
        result = formula(float(row[1]), float(row[2]), float(rowx[1]), float(rowx[2]))
        if result < 5:
            db_cursor3.execute("INSERT INTO output (id, idcomparable, result) VALUES (?, ?, ?)",(idoriginal,
                                idcomparable, result))
        db_cursor3.commit()

有什么想法吗?希望是一件愚蠢的事。我已经检查了这个post,但我仍然不知道如何解决它。

1 个答案:

答案 0 :(得分:1)

for rowx in db_cursor2:“第一次耗尽”db_cursor2 - 没有任何东西可以在第二次和之后的循环中循环。

因此,您必须在内部循环db_cursor2.execute("SELECT * FROM comparetable")之前将for row in db_cursor:移至内部外部循环for rowx in db_cursor2:,以便后者将< / strong>有一行一遍又一遍地循环! - )