1

私が取り組んでいる次のコードがありますが、「入力」テーブルの最初の行に対してのみトリックを行うことができます。ネストされたループの 2 つのカーソル間に関係がないことは明らかですが、ネストされた while-for ループを試してみたところ、同じ結果が得られました。私はpython 3.4を使用しています。

テーブル入力の行をテーブル comparetable の行と比較し、式によって得られた結果が 5 未満の場合は、指定されたテーブルの対応 ID (row[0] & rowx[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- 外側のループを介して 2 回目以降にループするものは何も残っていません。

そのため、内側のループの直前にdb_cursor2.execute("SELECT * FROM comparetable")toを外側のループの内側に移動する必要があります。これにより、内側のループに何度もループする行ができます!-)for row in db_cursor:for rowx in db_cursor2:

于 2014-12-20T21:52:50.213 に答える