2013-02-27 58 views
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语句中的所有信息。这可能很明显,但迟到了。Python - SQL更新没有更新每一行

队是1或2,最初意指表示在家或外出

感谢

+0

我猜这是一个远程数据库...你确定你的连接没有被切断? – gabeio 2013-02-27 23:17:06

+0

嗨,这个db目前是本地的 – user2073606 2013-02-27 23:23:05

+0

你怎么知道它没有更新它们?难道它的设置team_id到team_id? – 2013-02-27 23:29:38

回答

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 

其中一个字段导致比较问题。

我的猜测是时间字段是问题。时间可以非常精确,比输出到用户输出更精确。例如,也许时间保持到1/10秒,但时间只打印到第二秒。只有大约1/10的行将真正匹配完全匹配。