2013-07-06 30 views
0

我们正在制作一个简单的MUD作为一种“学习如何用Python进行编程”的项目。我们希望它是持久的,所以我们有一个MySQL数据库供Python脚本保存。然而,我们现在坚持从数据库中提取一个整数,并添加到数据库中,并再次保存。这里是我的代码:Python,MySQL,从数据库加载数据,更改它,再次保存它?

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

cur.execute返回受影响的行数 - 在你的情况,仅1行,这就是为什么它总是返回1.要获得实际的价值,你需要做的cur.fetchone(),这将返回值的元组 - 再次,在你的情况下,包含一个int的元组。

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

+0

我读过全局变量通常不被接受,但不知道该怎么办......否则,你可能会用我们拥有的全局变量来讨厌我们的代码.....无论如何,谢谢!这固定很好。 – mathieu

+1

将函数定义为“def gainxp(xp)',并将其传入并存储返回值:'xp = gainxp(xp)'。 –

相关问题