MongoEngine Document Objekt, das mit_json verwendet wird, wird nicht gespeichert

Ich versuche, ein Dokumentobjekt mit der Methode from_json zu erstellen. Object.save () wirft keinen Fehler, aber das Dokument ist nicht in den Mongo eingefügt.

Auf der anderen Seite, wenn ich das Objekt durch die Zuordnung von Werten zu jedem der Felder, es funktioniert gut.

Ich kann den Grund dafür nicht finden. Unten ist der Code für beide Fälle.

from flask import Flask from flask.ext.mongoengine import MongoEngine import json, datetime app = Flask(__name__) app.config["MONGODB_SETTINGS"] = {'DB': 'test','host': 'localhost'} app.config["SECRET_KEY"] = "mySecretKey" db = MongoEngine(app) class User(db.Document): user_id = db.StringField(max_length=16, primary_key = True) username = db.StringField(min_length=8) email = db.EmailField(required = True, unique = True) password = db.StringField(required = True) date_of_birth = db.DateTimeField() gender = db.StringField(choices = ('M', 'F')) ''' This one works. This will add a user in local mongodb(test) ''' u1 = User() u1.username = 'test12345' u1.user_id = 'testid12345' u1.email = 'test@test.com' u1.password = 'testerpass' u1.save() ''' This one doesn't works. ''' u2 = User() temp_json = {'username':'test2_12345','user_id':'testid2@12345','password':'testerpass2','email':'test2@test.com'} u2 = u2.from_json(json.dumps(temp_json)) u2.save() 

3 Solutions collect form web for “MongoEngine Document Objekt, das mit_json verwendet wird, wird nicht gespeichert”

Ein Mongoengine-Dokumentobjekt kann mit **kwargs initialisiert werden. So können wir damit die Funktion from_json auf folgende Weise implementieren: –

 obj_dict = { 'key1' : 'value1', 'key2' : 'value2' } user = User(**obj_dict) # User is a mongoengine document object 

Das hat für mich gearbeitet

from_json() wird in JSON-Daten in eine nicht gespeicherte Dokumentinstanz umgewandelt. Speichern von nicht gespeicherten Dokument ist use Parameter force_insert=True .

 ... >>> User.objects [<User: test1-12345>] >>> u2.save() >>> User.objects [<User: test1-12345>] >>> u2.save(force_insert=True) >>> User.objects [<User: test1-12345>, <User: test2-12345>] 

Aber dein Code kann ich.

Ich kann hier nicht kodieren (Ich brauche Fixture Daten von Unit Test.)

Ich Umwelt Django 1.6.5 und mongoengine 0.8.7

 >>> json_data1 = u1.to_json() >>> User.objects.delete() # or User.drop_collection() >>> User.objects [] >>> ... # json_data1 to dump for pickle. Next load for pickle. ... >>> u1 = User.from_json(json_data1) >>> u1.save() >>> User.objects [] >>> u1.save(force_insert=True) >>> User.objects [<User: test1-12345>] >>> 

force_insert=True versucht nur, ein neues Dokument zu erstellen.

Jedes Mal verwenden force_insert=True ist ein neues Dokument zu erstellen.

Verwenden Sie force_insert=False wird Dokument in der Datenbank erhalten.

Sie u2 dem Ergebnis von from_json() und verlieren Verweis auf das ursprüngliche Benutzerobjekt.

Ändern Sie u2 = u2.from_json(... zu u2.from_json(...

  • Sanierung von Inputs an MongoDB
  • Anfügen von Element in MongoDB-Dokumentarray in PyMongo ohne Wiedereinführung
  • KarteReduce in PyMongo
  • Lege das $ currentDate auf mongodb mit pymongo ein
  • Ist es möglich, $ addToSet mehrmals im selben Update zu nutzen?
  • UnicodeDecodeError beim Iterieren über MongoDB-Auflistung
  • Ist es möglich, eine Aggregation in Pymongo ohne Zeitüberschreitung für den Cursor zu erstellen?
  • Das JSON-Objekt kann nicht von MongoDB in Python serialisiert werden
  • Wie kopiere ich eine Sammlung von einer Datenbank auf eine andere Datenbank auf demselben Server mit PyMongo?
  • Wie verwende ich Pymongo, um eine bestehende Dokumentensammlung / db zu verbinden?
  • Chained, verschachtelte Dict () bekommen Anrufe in Python
  • Python ist die beste Programmiersprache der Welt.