2013-08-20 31 views
0

我有一个独立Python和Postgres的线程:事情没有被正确更新

thread.start_new_thread(listeningTF2Servers,()) 

运行最终调用了这个方法的线程:

def updateStats(): 
     ... 
     for player in pastGames[i]['players']: 
     ... 
         cursor.execute('SELECT yes FROM newstats WHERE nick = \'' + player['nick'] + '\' ORDER BY totalgames DESC LIMIT 1') 
         for row in cursor.fetchall(): 
          if row[0] == 1: 
           if scoreDict[player['team']] == 1: 
            cursor.execute('UPDATE newstats SET totalgames = totalgames + 1, wins = wins + 1, medicgames = medicgames + 1, medicwins = medicwins +1 WHERE nick = \'' + lower(player['nick']) + '\'') 
            cursor.execute('COMMIT;') 
           else: 
            #similar query 
          else: 
           if scoreDict[player['team']] == 1: 
            cursor.execute('UPDATE newstats SET totalgames = totalgames + 1, wins = wins + 1 WHERE nick = \'' + lower(player['nick']) + '\'') 
            cursor.execute('COMMIT;') 
           else: 
            #similar query 
     ... 

事情是这样的。此方法之前的线程中的其他所有内容均可正常工作。

但updateStats()似乎工作......奇怪。但是关于必须更新的玩家的HALF似乎并没有在数据库中得到更新。

例如,每场比赛之后都会调用此方法,以便玩家的游戏状态和赢得统计信息增加。但是对于一些球员来说,这一切都不会发生,尽管对于所有其他玩过同样游戏的玩家来说,这些数据都会得到正确的更新。

我的代码是否存在导致线程或postgres问题的问题?或者是有什么与SQ​​L或Postgres或Python,我不知道这会导致这些问题?

+0

我真的不想尝试...... – Joe

+0

我的观点是:不要通过字符串操作变量传递到一个查询。这打开了地狱和幽冥界的大门,唤醒了等待墙背后的主。让你的司机照顾这个。 I.E.而不是'execute('select 1 where a = \''+ x +'\'')'使用'execute('select 1 where a =%s',[x])''。 – Hyperboreus

回答

1

只是一个受过教育的猜测: 要你通过player['nick']第一个查询,但对方电话lower(player['nick'])虽然所有查询影响newstats.nick。所以我的猜测是,结果会有所不同,取决于球员的昵称是否全是小写。

你应该尝试这样的事:

lowerNick = lower(player['nick']) 
... 
cursor.execute('SELECT yes FROM newstats WHERE nick = %s ORDER BY totalgames DESC LIMIT 1', [lowerNick]) 
... 
cursor.execute('UPDATE newstats SET totalgames = totalgames + 1, wins = wins + 1, medicgames = medicgames + 1, medicwins = medicwins +1 WHERE nick = %s', [lowerNick]) 
... 
cursor.execute('UPDATE newstats SET totalgames = totalgames + 1, wins = wins + 1 WHERE nick = %s', [lowerNick]) 
+0

是啊......我只是注意到了这一点。我认为这可能是问题,我会仔细检查。 – Joe