Мне нужно проверить, находится ли элемент в хранилище данных, прежде чем обновить его.
У меня есть 2 списка: UNIQUES = ["B","K","V"]
и COUNTS = [5, 10, 3]
Это модель:
class Rep(db.Model):
mAUTHOR = db.UserProperty(auto_current_user=True)
mUNIQUE = db.TextProperty()
mCOUNT = db.IntegerProperty()
mDATE = db.DateTimeProperty(auto_now_add=True)
Эта функция обновляет базу данных:
def write_to_db(S, C):
REP = Rep(mUNIQUE=S, mCOUNT=C)
db.put(REP)
Вдохновленная этой страницей Я пытаюсь:
for i in range(len(UNIQUES)):
C_QUERY = Rep.all()
C_QUERY.filter("mAUTHOR =", user)
C_QUERY.filter("mUNIQUE =", UNIQUES[i])
C_RESULT = C_QUERY.fetch(1)
if C_RESULT:
C = C_RESULT.mCOUNT + COUNTS[i]
S = db.Text(UNIQUES[i])
write_to_db(S,C)
else:
C = COUNTS[i]
S = UNIQUES[i]
write_to_db(S, C)
Но результат не тот, который яожидать.C_RESULT всегда пуст;и вместо обновления создается новая запись.Что я делаю неправильно?Спасибо!
EDIT3: проблема решена
Согласно комментарию Дэвида Андерхилла, я обновил код, и теперь он работает.
if C_RESULT:
rep=C_RESULT[0]
rep.mCOUNT+=COUNTS[i]
rep.put()
РЕДАКТИРОВАТЬ 2: Связанный вопрос
Как мне обновить этот запрос и вернуть его с обновленной информацией?
C_QUERY = Rep.all()
C_QUERY.filter("mAUTHOR =", user)
C_QUERY.filter("mUNIQUE =", UNIQUES[i])
C_RESULT = C_QUERY.fetch(1)
Я хочу изменить mCOUNT и затем записать его в хранилище данных.Как мне это?Это похоже на то, что они делают в этой странице , но я не мог заставить это работать.Спасибо за вашу помощь.
РЕДАКТИРОВАТЬ
Я обновил код в соответствии с ответом Дэвида Андерхилла.Это решило проблему (но функциональность не правильная. Я не уверен, что это должен быть другой вопрос).
for i in range(len(UNIQUES)):
C_QUERY = Rep.all()
C_QUERY.filter("mAUTHOR =", user)
C_QUERY.filter("mUNIQUE =", UNIQUES[i])
C_RESULT = C_QUERY.fetch(1)
if C_RESULT:
C = C_RESULT[0].mCOUNT + COUNTS[i]
S = UNIQUES[i]
write_to_db(S, C)
else:
C = COUNTS[i]
S = UNIQUES[i]
write_to_db(S, C)