繁体   English   中英

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

[英]Python, MySQL, load data from database, change it, save it again?

我们正在制作一个简单的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,就很高兴了。

我们想做的是获取已经保存的11xp,再添加10x,保存,再次运行,再添加10x,这样我们得到31xp,而不是每次都保持一致的11xp,这显然击败了目的。

谢谢!

cur.execute返回受影响的行数-在您的情况下,仅返回1行,这就是为什么它总是返回1的原因。要获取实际值,您需要执行cur.fetchone() ,它将返回值的元组-同样,在您的情况下,包含单个int的元组。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM