2014-08-31 2 views
0

Я могу принести ряд из модели БД с условием и, но не в состоянии обновить конкретный столбец в этой строке:Невозможно обновить значение столбца в Python на Google App Engine

Моя модель DB выглядит следующим образом :

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 или нет с помощью следующего запроса:

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? 

в еще части, когда я знаю, что пользователь уже существует в нашем дб, я просто хочу подняться введите поле loginInAt с текущей меткой времени, как я могу это сделать? Я много искал в движке Google, но не смог ее найти.

Благодаря

Кришна

ответ

1

Результат вашего вызова q.get() это не идентификатор, а сам объект 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()' –

+0

Извините, я не понимаю вашу проблему вообще. Вы получаете элемент, изменяете значение и сохраняете его. Как это непонятно? В любом случае, GQL не является SQL и не поддерживает запросы UPDATE. –

+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,'IDIDID: None, u'nickName ': u'[email protected]', 'createdAt': None} '. Поэтому замените nickName на * и теперь все отлично. Большое спасибо за вашу любезную помощь, принятую. –

Смежные вопросы