web-dev-qa-db-fra.com

convertir le curseur pymongo en json

  • Je sais que c'est un problème assez courant. J'écris une petite application Flask et j'essaie de renvoyer certaines requêtes à la vue. Je me suis connecté à ma configuration MongoDB locale et j'ai effectué une requête réussie - mais je peux 'ne génère pas d'objet json avec.

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

28
sunwukung

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

13
Brian Cajes

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))
0
Randell Lamont

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))
0
Ananthu M