2016-07-28 64 views
1

这是我在使用dbs时的第一个镜头,我在基础知识方面遇到了一些麻烦。试图在网上查找,但无法找到简单问题的答案。当我尝试向我的数据库添加一些信息时,我遇到了一大堆错误。用python插入数据在mongodb中

import pymongo 


def get_db(): 
    from pymongo import MongoClient 
    client = MongoClient("mongodb://xxxxxx:[email protected]:29735/xxxxxxx") 
    db = client.myDB 
    return db 

def add_country(db): 
    db.countries.insert({"name": "Canada"}) 

def get_country(db): 
    return db.contries.find_one() 

db = get_db() 
add_country(db) 

我得到这个错误信息:

File "/Users/vincentfortin/Desktop/Python_code/mongo.py", line 21, in <module> 
    add_country(db) 
    File "/Users/vincentfortin/Desktop/Python_code/mongo.py", line 11, in add_country 
    db.countries.insert({"name": "Canada"}) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pymongo/collection.py", line 2212, in insert 
    check_keys, manipulate, write_concern) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pymongo/collection.py", line 535, in _insert 
    check_keys, manipulate, write_concern, op_id, bypass_doc_val) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pymongo/collection.py", line 516, in _insert_one 
    check_keys=check_keys) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pymongo/pool.py", line 239, in command 
    read_concern) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pymongo/network.py", line 102, in command 
    helpers._check_command_response(response_doc, None, allowable_errors) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pymongo/helpers.py", line 205, in _check_command_response 
    raise OperationFailure(msg % errmsg, code, response) 
pymongo.errors.OperationFailure: not authorized on myDB to execute command { insert: "countries", ordered: true, documents: [ { _id: ObjectId('579a6c6ed51bef1274162ff4'), name: "Canada" } ] } 
+0

请编辑格式,这太恐怖了!我不知道你的问题,但也许写权限问题?你可以尝试用读取请求而不是写入请求吗? –

+0

当我只做: DB = get_db() 打印分贝 它打印此: 数据库(MongoClient(主机= [ 'ds029735.mlab.com:29735'],document_class =快译通,tz_aware =假连接= True),u'myDB' 其中我猜我意味着我连接到分贝,但我似乎无法添加任何东西 – VincFort

回答

2
  1. 检查您xxxxxxxds029735.mlab.com:29735/xxxxxxx等于myDBdb = client.myDB两次。我的意思是如果您的连接字符串是mongodb://username:[email protected]:29735/xyz那么您的代码应该是db = client.xyz而不是db = client.zyx(或其他名称)。

  2. 入住MLAB控制面板,如果您的用户只读http://i.imgur.com/It32S1d.png

这两个问题将返回错误,像你,所以我不知道与一个你所面临做。

+0

感谢您的回应。为什么用户应该只读吗?将稍后检查,如果他们工作,但我知道我的用户不是只读的。 – VincFort

+0

@VincFort它不应该只是'OperationFailure:未经myDB授权来执行命令'如果是的话可以抛出。 –