2017-09-15 4 views
0

Je dois faire un robot (je choisis python) pour remplir une base de données créer dans un projet Symfony (doctrine d'utilisation). Le crawler est fait, mais quand j'essaye de remplir la base de données cela ne fonctionne pas ...Connectez-vous à une base de données Mongo en python

Donc je crée un nouveau test de table dans mon db (mtdbdd), avec juste un ID d'auto-incrémentation et un titre . J'essaie de remplir avec ce code:

from pymongo import MongoClient 

MONGO_URI = 'mongodb://root:[email protected]:8889' 

client = MongoClient(connect=False) 
client = MongoClient(MONGO_URI) 
db = client.mtdbdd 
coll = db.test 

try: 
    result = coll.insert_one({"title": "test"}) 
except coll.errors.OperationFailure as e: 
    print e.code 
    print e.details 

Mais je l'erreur:

pymongo.errors.ServerSelectionTimeoutError: Got opcode 3945 but expected 1 

Quelqu'un peut me aider? Merci les gars !

+0

comment avez-vous MongoDB? Mongodb port par défaut est 27017 habituellement, donc pas sûr pourquoi vous utilisez 8889 – MrE

+0

changer les 2 lignes de MongoClient, à 'MongoClient (MONGO_URI, connect = False)' – eLRuLL

+0

@MrE J'utilise ce port parce que ma base de données est sur ce port, shoud ' nt je? (J'utilise Mamp sur un mac) –

Répondre

0

Maintenant, j'exécuter ce script:

import pymongo 
from pymongo import MongoClient 

MONGO_URI = "mongodb://root:[email protected]:8889/mtdbdd" 

client = MongoClient(MONGO_URI) 
db = client.mtdbdd 
collection = db.land 
post = {"title": "test"} 

try: 
    post_id = collection.insert_one(post) 
except collection.errors.OperationFailure as e: 
    print e.code 
    print e.details 

Mais l'erreur proviennent de la ligne:

post_id = collection.insert_one(post) 
+0

Etes-vous sûr que votre mongodb est authentifié (sécurité)? Si auth n'est pas activé (la valeur par défaut est: disabled) manuellement, vous devez éditer votre mongouri en tant que "mongodb: // localhost: 8889" ou "mongodb: //127.0.0.1: 8889" votre code échoue à 'post_id = collection.insert_one (post) ''coz pymongo est incapable de se connecter à mongodb. Vérifiez également que l'instance de mongod est en cours d'exécution. Pourriez-vous s'il vous plaît envoyer votre fichier 'mongod.conf' :) –

+0

D'autre part, si auth est activé, SSL peut également être activé. 'ssl = True' et' ssl_cert_reqs = ssl.CERT_NONE' dans la construction de 'MongoClient()' pourrait aider. 'ssl_cert_reqs = ssl.CERT_NONE' bien sûr que si le certificat est auto-signé et ne doit pas être vérifié. Pour autant que je me souvienne, j'ai reçu des erreurs de timeout de 'pymongo' quand je n'ai pas activé SSL dans le client (pour mon serveur sécurisé SSL). – Aufziehvogel