0

我们正在制作一个简单的 MUD,作为一种“学习如何在 Python 中编程”项目。我们希望它是持久的,所以我们有一个 MySQL 数据库供 Python 脚本保存。但是,我们现在有点卡住了从数据库中提取一个整数,添加到它,然后再次保存它。这是我的代码:

initxp = cur.execute("SELECT Exp FROM CharactersDB WHERE ID=%s", name)
print "initxp is,", initxp
global xp
xp = int(initxp)
print "current xp is ", xp

global xpcounter
xpcounter = ("UPDATE CharactersDB SET Exp=%s WHERE ID=%s") #where is name variable


#save initial xp to db
cur.execute(xpcounter, (xp, name,))
db.commit()

#when you gain xp
def gainxp():
    global xp
    global xpcounter
    xp = xp + 10
    print name, "gains", xp, "xp!"
    #save new xp to db
    cur.execute(xpcounter, (xp, name,))
    db.commit()
    return xp


#save stats to the database,
#this funciton will be used in the character creation file

gainxp()

我没有任何错误,尽管我确实发生了一些奇怪的事情:

首先,当它打印“initxp”变量时,它每次都返回 1。“当前 xp”行也是如此。因此,当它进入 gainxp() 函数时,它只是将 1 加到 10,保存了 11 的总数,然后就开始了。

我们想要做的是取已经保存的 11 xp,再添加 10,保存,再次运行,然后再添加 10,这样我们就有 31xp,而不是每次都一致的 11,这显然打败了目的。

谢谢!

4

1 回答 1

1

cur.execute返回受影响的行数-在您的情况下,只有 1 行,这就是它始终返回 1 的原因。要获取实际值,您需要执行cur.fetchone(),这将返回值的元组-再次,在您的情况下,元组包含一个 int。

只是一个额外的提示,因为这是一个“学习 Python”的练习:全局变量通常不被接受。您应该xp明确地传递给您的gainxp函数。

于 2013-07-06T22:18:24.867 回答