0
cur.execute("""SELECT match_own_goals.game_id, home_team, away_team, team, time FROM football.match_own_goals JOIN football.match_info ON match_own_goals.game_id = match_info.game_id""")
e = cur.fetchall()

for game in e:
        print game
        time = game[4]
        if game[3] == 1:
            team_id = game[1]
        else:
            team_id = game[2]
        cur.execute("""UPDATE football.match_own_goals SET team_id = %s WHERE game_id = %s AND time = %s""", (team_id, game[0], time))
        db.commit()

これが更新されるはずの108行のうち、更新されたのは約10行だけですが、なぜそうなるのかわかりません。SELECTステートメント内のすべての情報を抽出します。当たり前のことかもしれませんが、遅いです。

チームは1または2のいずれかであり、元々は自宅または離れた場所を意味します

ありがとう

4

1 に答える 1

0

クエリは次のとおりです。

UPDATE football.match_own_goals
    SET team_id = %s
    WHERE game_id = %s AND time = %s

これが時々機能する場合、クエリは構文的に正しく、データベースに接続されています。

何が起こっているかというと、選択された行が期待どおりではないということです。したがって、次のクエリを実行して、何を更新する必要があるかを確認します。

select *
from football.match_own_goals
WHERE game_id = %s AND time = %s

2 つのフィールドの 1 つが比較で問題を引き起こしています。

私の推測では、時間フィールドが問題です。時間は非常に正確で、ユーザー出力に出力されるものよりも正確です。たとえば、おそらく時間は 1/10 秒に維持されますが、時間は秒単位でしか出力されません。完全一致と実際に一致するのは、行の約 1/10 だけです。

于 2013-02-28T02:10:08.113 に答える