Search code examples
pythongoogle-app-enginegoogle-query-language

Unable to update a column value in Python on Google App engine


I am able to fetch a row from a db model with condition and but unable to update a particular column in that row:

My DB model is as follow:

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)

I can check that user is exist in our UserDB model or not with following query:

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?

In the else part once I know that user is already exist in our db, I just want to update the loginInAt field with current timestamp, how can I do?, I search a lot on google app engine but unable to find it.

Thanks

Krishna


Solution

  • The result of your call to q.get() is not an id, but the actual UserDB object. So you can update it directly and save it:

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

    (UserDb is a strange name for a model class, by the way: it should be just User. And there's no need to prefix all the field names, either.)