2013-07-06 31 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)'。 –

相關問題