Je dois vérifier si l'élément est dans la banque de données avant de le mettre à jour.Comment puis-je mettre à jour les informations dans mon magasin de données?
J'ai 2 listes: UNIQUES = ["B","K","V"]
et COUNTS = [5, 10, 3]
Ceci est le modèle:
class Rep(db.Model):
mAUTHOR = db.UserProperty(auto_current_user=True)
mUNIQUE = db.TextProperty()
mCOUNT = db.IntegerProperty()
mDATE = db.DateTimeProperty(auto_now_add=True)
Cette fonction met à jour la base de données:
def write_to_db(S, C):
REP = Rep(mUNIQUE=S, mCOUNT=C)
db.put(REP)
Inspiré par ce page je tente:
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)
Mais le résultat n'est pas ce que j'attends. C_RESULT est toujours vide. et au lieu de mettre à jour, un nouvel enregistrement est créé. Qu'est-ce que je fais mal? Merci!
EDIT3: Problème résolu
Selon le commentaire de David Underhill Je mis à jour le code et il fonctionne maintenant.
if C_RESULT:
rep=C_RESULT[0]
rep.mCOUNT+=COUNTS[i]
rep.put()
EDIT2: question
Comment puis-je mettre à jour cette requête et de le remettre à jour les informations?
C_QUERY = Rep.all()
C_QUERY.filter("mAUTHOR =", user)
C_QUERY.filter("mUNIQUE =", UNIQUES[i])
C_RESULT = C_QUERY.fetch(1)
Je souhaite modifier mCOUNT, puis l'écrire dans le magasin de données. Comment je fais ça? Cela ressemble à exactement la même chose qu'ils font dans this page mais je ne pouvais pas le faire fonctionner. Merci de votre aide.
EDIT
I mis à jour le code par la réponse de David Underhill. Cela a résolu le problème (mais la fonctionnalité n'est pas correcte, je ne suis pas sûr que ce soit une question différente).
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)
@David Underhill: Merci beaucoup! Cela a résolu le problème. J'ai ajouté le code mis à jour ci-dessus. Pouvez-vous également suggérer des solutions pour corriger le reste du code? Comment mettre à jour juste cet article? La façon dont il est maintenant met à jour toute la base de données; donc il y a toujours 1 objet dedans.(désolé, je suis toujours très confus au sujet de la notation par points et quel objet est quoi) Merci encore. – Zeynel
De rien. Je ne suis pas sûr de ce que vous entendez par "ceci" dans "Comment mettre à jour juste cet article?" Peut-être pourriez-vous fournir plus de détails sur ce que vous essayez d'accomplir (ici c'est bien, dans une autre question pourrait être mieux). –
@David Underhill: merci. J'ai commencé une nouvelle question: http://stackoverflow.com/questions/4119560/updating-just-1-entity-in-datastore – Zeynel