Python,MySQL,从数据库加载数据,更改它,再次保存?

时间:2013-07-06 22:14:01

标签: python mysql

我们正在制作一个简单的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,显然无视目的。

谢谢!

1 个答案:

答案 0 :(得分:1)

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

这是一个额外的提示,因为这是一个'学习Python'练习:全局变量通常不受欢迎。您应该将xp明确传递到gainxp函数。