2013-02-27 61 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的行將真正匹配完全匹配。