我们正在制作一个简单的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,显然无视目的。
谢谢!
答案 0 :(得分:1)
cur.execute
返回受影响的行数 - 在您的情况下,只有1行,这就是它总是返回1的原因。要获得实际值,您需要执行cur.fetchone()
,这将返回一个值元组 - 在你的例子中,再一个包含单个int的元组。
这是一个额外的提示,因为这是一个'学习Python'练习:全局变量通常不受欢迎。您应该将xp
明确传递到gainxp
函数。