我有一个独立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问题的问题?或者是有什么与SQL或Postgres或Python,我不知道这会导致这些问题?
我真的不想尝试...... – Joe
我的观点是:不要通过字符串操作变量传递到一个查询。这打开了地狱和幽冥界的大门,唤醒了等待墙背后的主。让你的司机照顾这个。 I.E.而不是'execute('select 1 where a = \''+ x +'\'')'使用'execute('select 1 where a =%s',[x])''。 – Hyperboreus