如何解决MongoClient insert_one工作正常,而mongoengine connect不起作用未经身份验证
我尝试在验证后使用mongoengine界面插入文档,但仍然被拒绝。使用MongoClient不会发生这种情况...
这是mongoengine尝试插入一个文档的方法:
In [1]: from mongoengine import connect
In [2]: db = connect(host='localhost',port=27017,username='root',password='pass')
In [3]: db.local.col.insert_one({'a':1})
---------------------------------------------------------------------------
OperationFailure Traceback (most recent call last)
<ipython-input-3-55a23806fbb1> in <module>
----> 1 db.local.col.insert_one({'a':1})
~/venv3.8/lib/python3.8/site-packages/pymongo/collection.py in insert_one(self,document,bypass_document_validation,session)
696 write_concern = self._write_concern_for(session)
697 return InsertOneResult(
--> 698 self._insert(document,699 write_concern=write_concern,700 bypass_doc_val=bypass_document_validation,~/venv3.8/lib/python3.8/site-packages/pymongo/collection.py in _insert(self,docs,ordered,check_keys,manipulate,write_concern,op_id,bypass_doc_val,session)
611 """Internal insert helper."""
612 if isinstance(docs,abc.Mapping):
--> 613 return self._insert_one(
614 docs,615 bypass_doc_val,session)
~/venv3.8/lib/python3.8/site-packages/pymongo/collection.py in _insert_one(self,doc,session)
600 _check_write_command_response(result)
601
--> 602 self.__database.client._retryable_write(
603 acknowledged,_insert_command,session)
604
~/venv3.8/lib/python3.8/site-packages/pymongo/mongo_client.py in _retryable_write(self,retryable,func,session)
1496 """Internal retryable write helper."""
1497 with self._tmp_session(session) as s:
-> 1498 return self._retry_with_session(retryable,s,None)
1499
1500 def _handle_getlasterror(self,address,error_msg):
~/venv3.8/lib/python3.8/site-packages/pymongo/mongo_client.py in _retry_with_session(self,session,bulk)
1382 retryable = (retryable and self.retry_writes
1383 and session and not session.in_transaction)
-> 1384 return self._retry_internal(retryable,bulk)
1385
1386 def _retry_internal(self,bulk):
~/venv3.8/lib/python3.8/site-packages/pymongo/mongo_client.py in _retry_internal(self,bulk)
1414 raise last_error
1415 retryable = False
-> 1416 return func(session,sock_info,retryable)
1417 except ServerSelectionTimeoutError:
1418 if is_retrying():
~/venv3.8/lib/python3.8/site-packages/pymongo/collection.py in _insert_command(session,retryable_write)
588 command['bypassDocumentValidation'] = True
589
--> 590 result = sock_info.command(
591 self.__database.name,592 command,~/venv3.8/lib/python3.8/site-packages/pymongo/pool.py in command(self,dbname,spec,slave_ok,read_preference,codec_options,check,allowable_errors,read_concern,parse_write_concern_error,collation,client,retryable_write,publish_events,user_fields,exhaust_allowed)
681 self._raise_if_not_writable(unacknowledged)
682 try:
--> 683 return command(self,684 self.is_mongos,685 session,~/venv3.8/lib/python3.8/site-packages/pymongo/network.py in command(sock_info,is_mongos,listeners,max_bson_size,compression_ctx,use_op_m
sg,unacknowledged,exhaust_allowed)
157 client._process_response(response_doc,session)
158 if check:
--> 159 helpers._check_command_response(
160 response_doc,sock_info.max_wire_version,None,161 allowable_errors,~/venv3.8/lib/python3.8/site-packages/pymongo/helpers.py in _check_command_response(response,max_wire_version,msg,parse_write_concern_error)
165
166 msg = msg or "%s"
--> 167 raise OperationFailure(msg % errmsg,code,response,168 max_wire_version)
169
OperationFailure: command insert requires authentication,full error: {'ok': 0.0,'errmsg': 'command insert requires authentication','code': 13,'codeName': 'Unauthorized'}
失败,但是MongoClient出于某些原因起作用:
In [4]: from pymongo import MongoClient
In [5]: col = MongoClient(host='localhost',password='pass')
In [6]: col.local.col.insert_one({'a':1})
Out[6]: <pymongo.results.InsertOneResult at 0x7ff2a347a8c0>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。