首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pymongo :typeError必须是dict、bson.son.SON、bson.raw_bson.RawBSONDocument的实例

pymongo :typeError必须是dict、bson.son.SON、bson.raw_bson.RawBSONDocument的实例
EN

Stack Overflow用户
提问于 2017-03-22 20:06:33
回答 1查看 28.5K关注 0票数 7

我试图将数据从SQL Server迁移到MongoDB,但在将数据导入到MongoDB的最后阶段出现了类型错误。

代码语言:javascript
复制
mongoImp = dbo.insert_many(jArray)
  File "/home/lrsa/.local/lib/python2.7/site-packages/pymongo/collection.py", line 710, in insert_many
    blk.ops = [doc for doc in gen()]
  File "/home/lrsa/.local/lib/python2.7/site-packages/pymongo/collection.py", line 702, in gen
    common.validate_is_document_type("document", document)
  File "/home/lrsa/.local/lib/python2.7/site-packages/pymongo/common.py", line 407, 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

我还检查了type(jArray),它是一个str。也尝试将数据类型转换为list,但未能成功。

我的代码:

代码语言:javascript
复制
import pyodbc
import json
import collections
import pymongo
from bson import json_util

odbcArray = []
mongoConStr = '192.168.10.107:36006'
sqlConStr = 'DRIVER={MSSQL-NC1311};SERVER=tcp:192.168.10.103,57967;DATABASE=AdventureWorks;UID=testuser;PWD=testuser'
mongoConnect = pymongo.MongoClient(mongoConStr)
sqlConnect = pyodbc.connect(sqlConStr)

dbo = mongoConnect.eaedw.sqlData
dbDocs = dbo.find()
sqlCur = sqlConnect.cursor()
sqlCur.execute("""
            SELECT TOP 2 BusinessEntityID,Title, Demographics, rowguid, ModifiedDate
            FROM Person.Person
            """)

tuples = sqlCur.fetchall()

for tuple in tuples:
    doc = collections.OrderedDict()
    doc['id'] = tuple.BusinessEntityID
    doc['title'] = tuple.Title
    doc['dgrap'] = tuple.Demographics
    doc['rowi'] = tuple.rowguid
    doc['mtime'] = tuple.ModifiedDate
    odbcArray.append(doc)

jArray = json.dumps(odbcArray, default=json_util.default)
mongoImp = dbo.insert_many(jArray)

mongoConnect.close()
sqlConnect.close()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-22 20:20:38

从MongoDB的网页上查看这个bulk insert example。跳过json.dumps调用(将文档数组转换为json格式的字符串),直接插入odbcArray

代码语言:javascript
复制
mongoImp = dbo.insert_many(odbcArray)
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42951179

复制
相关文章

相似问题

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