1

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

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

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()

有任何想法吗?希望是一件愚蠢的事情。我已经检查了这篇文章,但我仍然不知道如何解决它。

4

1 回答 1

1

第一次for rowx in db_cursor2:“耗尽” db_cursor2- 第二次和以后通过外循环没有任何东西可以循环。

因此,您必须将db_cursor2.execute("SELECT * FROM comparetable")to移到外部循环内部for row in db_cursor:,就在内部循环之前,for rowx in db_cursor2:这样后者就会有行可以一遍又一遍地循环!-)

于 2014-12-20T21:52:50.213 回答