2014-08-31 19 views
0

我能夠從與條件的DB模式讀取行和,但無法更新該行中的特定列:無法更新谷歌應用程序引擎Python中的列值

我的數據庫模型如下:剛

q = db.GqlQuery("SELECT userNickName FROM UserDB WHERE userEmailID =:1", user.email()) 
useremailid = q.get() 
if useremailid is None: 
    logging.error('user is not loged in earlier so create a row for that user') 
    userDB = UserDB(userNickName = user.nickname(), 
        userEmailID = user.email(), 
        userID  = user.user_id() 
        ) 
    userDB.logedInAt = datetime.now() 
    userDB.put() # Insert a row for a user 
else: # User exist in our UserDB, just update `logInAt` column 
    logging.error("update the login time, since user is already user") 
    # How do i Update logedInAt column? 

在其他部分,一旦我知道,用戶已經在我們的數據庫存在,我:

class UserDB(db.Model): 
    userNickName = db.StringProperty() 
    userEmailID = db.StringProperty() 
    userID  = db.StringProperty() 
    createdAt  = db.DateTimeProperty(auto_now_add=True) 
    logedInAt  = db.DateTimeProperty(auto_now=True) 

我可以檢查該用戶是我們userDB的模型中存在或不與下面的查詢想起來使用當前時間戳記日期loginInAt字段,我該怎麼辦?我在谷歌應用程序引擎上搜索了很多,但無法找到它。

感謝

克里希納

回答

1

您的來電q.get()的結果不是一個ID,但實際userDB的對象。所以,你可以直接更新它,並將其保存:

user = q.get() 
if... 
else: 
    user.logedInAt = datetime.now() 
    user.put() 

(userDB的是一個模型類一個陌生的名字,順便說一句:這應該只是用戶沒有必要前綴的所有字段名,無論是)

+0

我完全同意你的建議,並在代碼中進行更新。但是它如何更新已登錄用戶的'logedInAt'?我只是想執行下面的SQL查詢:UPDATE UserDB SET logedInAt = NOW()WHERE userEmailID = user.email()' – 2014-08-31 13:50:57

+0

對不起,我根本不理解你的問題。您獲取該項目,更改一個值並保存它。那怎麼不清楚?在任何情況下,GQL都不是SQL,並且不支持UPDATE查詢。 – 2014-08-31 14:35:38

+0

我得到了問題,並解決它的幫助下你的上面的意見,其實問題是與查詢'q = db.GqlQuery(「SELECT nickname FROM UserDB WHERE userEmailID =:1」,user.email())'I只能選擇'nickname',因此出現以下錯誤''不能放置一個部分實體:%s'%entity) BadRequestError:無法放置部分實體:{'logedInAt':datetime.datetime(2014,9,1, 2,49,45,344570),'userID':None,'emailID':None,u'nickName':u'[email protected]','createdAt':None}'。所以用*代替nickname,現在一切正常。非常感謝您的善意幫助,我們接受。 – 2014-09-01 02:59:22