Postgres的Python线程:没有正确地更新

2024-09-29 21:25:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个独立运行的线程

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()似乎可以工作。。。奇怪的是。但是,大约一半的玩家必须更新,似乎没有得到更新的数据库。你知道吗

例如,在每一场比赛之后,这个方法被调用,这样玩家的比赛数据和胜利数据就会增加。但是对于一些玩家来说,这种情况从来没有发生过,即使对于所有其他玩同一游戏的玩家来说,数据都会得到正确的更新。你知道吗

我的代码是否有问题导致线程或postgres出现问题?或者是SQL、postgres或Python中有什么我不知道的东西导致了这些问题?你知道吗


Tags: 数据方法executeif玩家where线程thread
1条回答
网友
1楼 · 发布于 2024-09-29 21:25:01

只是一个有根据的猜测: 传递给第一个查询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])

相关问题 更多 >

    热门问题