更新PostgreSQL表上的查询无效

时间:2016-01-11 13:37:35

标签: python database postgresql

我正在尝试使用Python代码构建PostgreSQL数据库,以模拟锦标赛。玩家表包含四列 - 名称,ID,胜利,匹配。

reportMatch()函数接受两个参数,即获胜者的ID和特定匹配的输家,并更新数据库中的统计信息。它会将获胜者的“胜利”增加1,并将两个玩家的“匹配”增加1。

def reportMatch(winner, loser):
    conn = connect()
    c = conn.cursor()
    SQL = 'update players set wins = 1 where id = %s;'
    data = (winner, )
    c.execute(SQL, data)
    SQL = 'update players set matches = 1 where id = %s or id = %s;'
    data = (winner, loser)
    c.execute(SQL, data)

我知道我不应该将胜利和匹配设置为1,因为它没有递增当前值,但数据库当前没有匹配。因此,第一次运行它时,将值设置为1暂时起作用。

通过客户端代码函数testReportMatches()

调用上述函数
def testReportMatches():
    registerPlayer("Bruno Walton")
    registerPlayer("Boots O'Neal")
    registerPlayer("Cathy Burton")
    registerPlayer("Diane Grant")
    standings = playerStandings()
    [id1, id2, id3, id4] = [row[1] for row in standings]
    reportMatch(id1, id2)
    reportMatch(id3, id4)
    standings = playerStandings()
    for (n, i, w, m) in standings:
        if m != 1:
            raise ValueError("Each player should have one match recorded.")
        if i in (id1, id3) and w != 1:
            raise ValueError("Each match winner should have one win recorded.")
        elif i in (id2, id4) and w != 0:
            raise ValueError("Each match loser should have zero wins recorded.")
    print "7. After a match, players have updated standings."

registerPlayer()用于将新玩家插入玩家数据库。 playerStandings()用于获取所有玩家的元组列表。

我遇到的问题是reportMatch()中的更新查询,这似乎不起作用。我尝试在reportMatch()中对testReportMatches()的两次调用之前和之后打印出排名,但是他们都有匹配并赢得为0.不知何故,数据库中的匹配和获胜都没有更新。< / p>

1 个答案:

答案 0 :(得分:2)

您需要在reportMatch函数的末尾使用conn.commit()提交事务。

请参阅psycopg2 usage