La solution la plus courante que j'ai vue consiste à importer json_util depuis pymongo, c'est-à-dire.
import json
from pymongo import json_util
results = connection.get_collection('papayas_papaya')
results = results.find({
'identifier': '1',
})
serialized_results = [json.dumps(result, default=json_util.default, separators=(',', ':')) for result in results]
J'ai installé pymongo dans mon Flask virtualenv en utilisant pip c'est-à-dire:
pip install pymongo
Lors de l'exécution du code ci-dessus, je reçois toujours l'erreur suivante:
ImportError: cannot import name json_util
Je peux voir cette ligne dans pymongo-2.3-py2.6.Egg-info/installed-files.txt ../bson/json_util.py
Quelqu'un a-t-il des conseils qui peuvent m'aider à comprendre ce que je fais mal?
MISE À JOUR : Après avoir exploré cela un peu plus loin - j'ai réussi à faire fonctionner cela ainsi:
import pymongo
from bson.json_util import dumps
connection = pymongo.Connection("localhost", 27017)
db = connection.mydocs
def get():
cursor = db.foo.find({"name" : "bar"})
return dumps(cursor)
L'un des problèmes que j'ai rencontrés était d'essayer d'installer pip bson indépendamment - pymongo apporte bson avec lui et l'importation de bson séparément a causé des problèmes.
Merci @Cagex de m'avoir pointé dans la bonne direction
Il semble que vous souhaitiez importer à partir de bson et non de pymongo. Je crois que json_util a été déplacé vers ce module récemment. http://api.mongodb.org/python/current/api/bson/json_util.html
J'ai vu pas mal de messages sur ce problème mais ils n'ont pas résolu le problème pour moi. Ce qui a fonctionné pour moi, c'était d'utiliser dumps (), puis charges ():
import pymongo
from bson.json_util import dumps
from bson.json_util import loads
connection = pymongo.Connection("localhost", 27017)
db = connection.mydocs
def get():
cursor = db.foo.find({"name" : "bar"})
return loads(dumps(cursor))
vous pouvez utiliser list () pour convertir le curseur pymongo en objet json.
import pymongo
from bson.json_util import dumps
from bson.json_util import loads
connection = pymongo.Connection("localhost", 27017)
db = connection.mydocs
def get():
cursor = list(db.foo.find({"name" : "bar"}))
return loads(dumps(cursor))