У меня есть поток, который работает независимо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
Моя точка является: Никогда не передавайте переменные через манипуляции строки в запросе. Это открывает врата в ад и нижние царства и пробуждает Того, Кто ждет За Стеной. Пусть ваш водитель позаботится об этом. И.Е. вместо 'execute ('select 1 where a = \' '+ x +' \ '')' use 'execute ('select 1 where a =% s', [x])'. – Hyperboreus