gpt4 book ai didi

python - PostgreSQL 表上的更新查询不起作用

转载 作者:搜寻专家 更新时间:2023-10-30 20:16:56 25 4
gpt4 key购买 nike

我正在尝试使用 Python 代码构建一个模拟锦标赛的 PostgreSQL 数据库。 players 表包含四列 - name、id、wins、matches。

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)

我知道我不应该将 wins 和 matches 设置为 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() 中的更新查询,它似乎不起作用。我尝试在 testReportMatches() 中两次调用 reportMatch() 之前和之后打印排名,但它们的匹配和获胜均为 0。不知何故,匹配和数据库中的胜利没有更新。

最佳答案

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

参见 psycopg2 usage .

关于python - PostgreSQL 表上的更新查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34722937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com