首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pymongo在mongodb中插入数据时出错

使用pymongo在mongodb中插入数据时出错
EN

Stack Overflow用户
提问于 2018-04-09 02:46:52
回答 2查看 1.9K关注 0票数 0

我是刚接触过pymongo和mongodb的人。我正在尝试与pymongo交互地插入文件。当我通过python脚本尝试文档时,它失败了。

输入名称: test3

输入地址: Someaddress

输入电话号码: 9876543

代码语言:javascript
复制
{"Name": "test3", "Phone": 9876543, "Address": "Someaddress"} # Here I am printing the document to be inserted

Traceback (most recent call last):
File "./sample.py", line 54, in <module>
insertDocument()

 File "./sample.py", line 27, in insertDocument

 insert_id=db.collection.insert_one(obj)

 File "/appl/swinstall/mongo-python-driver-master/pymongo/collection.py", line 676, in insert_one

common.validate_is_document_type("document", document)

 File "/appl/swinstall/mongo-python-driver-master/pymongo/common.py", line 434, in validate_is_document_type

"collections.MutableMapping" % (option,))

TypeError: document must be an instance of dict, bson.son.SON, bson.raw_bson.RawBSONDocument, or a type that inherits from collections.MutableMapping

下面是我的代码:

代码语言:javascript
复制
#!/usr/bin/python

import sys
import os
from pymongo import MongoClient
ch=MongoClient()
db=ch.local

def insertDocument():
print "insertDocument"
print "Enter the name:"
name=raw_input(">> ")
print "Enter the address"
address=raw_input(">> ")
print "Enter the phone number"
phone=raw_input(">> ")
obj='{"Name": "'+ str(name) +'", "Phone": '+ str(phone) +', "Address": "'+ str(address) +'"}'
print obj
insert_id=db.collection.insert_one(obj)

insertDocument()

但是当我在python终端上尝试相同的时候,它就会被插入。

代码语言:javascript
复制
test={"Name":"Test3", "Phone":98765653, "Address":"SomeAddress"}

insert_id=db.collection.insert_one(test)

x=db.collection.find()

x.count()

5

for y in x:

... print y

...

{u'Phone': 123456, u'_id': ObjectId('5ac59b23788b851887bb4a77'), u'Name': u'test', u'Address': u'DHL'}
{u'Phone': 5678990, u'_id': ObjectId('5ac5be03788b851c9f7da382'), u'Name': u'test2', u'Address': u'Cyberjaya'}
{u'Phone': 7872476, u'_id': ObjectId('5ac5be3b788b851c9f7da383'), u'Name': u'test3', u'Address': u'Kuala Lumpur'}
{u'Phone': 8977101750L, u'_id': ObjectId('5ac5dc59788b8523141b43eb'), u'Name': u'Soumya', u'Address': u'Cybersquare'}
{u'Phone': 98765653, u'_id': ObjectId('5acace4a788b855f05c7ea0d'), u'Name': u'Test3', u'Address': u'SomeAddress'} <== This got inserted

有人能帮忙吗?

EN

回答 2

Stack Overflow用户

发布于 2018-08-19 19:31:10

通过以下内容更改代码:

insert_id=db.collection.insert_one(json.loads(obj))

票数 0
EN

Stack Overflow用户

发布于 2018-09-09 01:57:36

错误消息给出了提示。上面说obj一定是个白痴。在交互式方法中,您确实定义了一个dict,但是在脚本中您正在创建一个字符串。这串看起来像个白痴,但事实并非如此。

您可以通过打印来确认这一点:

打印(打印(Obj))

因此,解决方案是用键值对将其存储在一个dict中。类似于:

obj = {} obj"name"=str(name) 等等..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49724882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档