2017-04-14 42 views
0

将mongodb导入SQL数据时,我已经将几个表合并为一个嵌入数组,但在执行时我收到了表示'关键错误'的语法错误。 以下是我的代码。pymongo:错误在OrderedDict中创建嵌入数组

import pyodbc, json, collections, pymongo, datetime 

arrayCol =[] 
mongoConStr = 'localhost:27017' 
sqlConStr = 'DRIVER={MSSQL-NC1311};SERVER=tcp:172.16.1.75,1433;DATABASE=devdb;UID=qauser;PWD=devuser' 
mongoConnect = pymongo.MongoClient(mongoConStr) 
sqlConnect = pyodbc.connect(sqlConStr) 
dbo = mongoConnect.eaedw.ctArrayData 
sqlCur = sqlConnect.cursor() 
sqlCur.execute('''SELECT M.fldUserId ,TRU.intRuleGroupId ,TGM.strGroupName FROM TBL_USER_MASTER M 
     JOIN TBL_RULEGROUP_USER TRU ON M.fldUserId = TRU.intUserId 
     JOIN tbl_Group_Master TGM ON TRU.intRuleGroupId = TGM.intGroupId 
      ''') 
tuples = sqlCur.fetchall() 
for tuple in tuples: 
    doc = collections.OrderedDict() 
    doc['fldUserId'] = tuple.fldUserId 
    doc['groups.gid'].append(tuple.intRuleGroupId) 
    doc['groups.gname'].append(tuple.strGroupName) 
    arrayCol.append(doc) 

mongoImp = dbo.insert_many(arrayCol) 

sqlCur.close() 
mongoConnect.close() 
sqlConnect.close() 

在这里,我试图创建一个嵌入式阵列名groups将举行gidgroupname作为阵列中的子文档。
我得到错误使用append,它运行成功,没有嵌入式阵列。 数组定义中是否有错误或错误?

回答

0

您不能附加到不存在的列表。当你调用append时,doc ['groups.gid']和doc ['groups.gname']没有任何价值。即使你解决了这个问题,PyMongo也禁止你插入带有诸如“groups.gid”之类的包含点的键的文档。我想你打算这样做:

for tuple in tuples: 
    doc = collections.OrderedDict() 
    doc['fldUserId'] = tuple.fldUserId 
    doc['groups'] = collections.OrderedDict([ 
     ('gid', tuple.intRuleGroupId), 
     ('gname', tuple.strGroupName) 
    ]) 
    arrayCol.append(doc) 

我只是猜测,根据你的问题,你真的想创建的架构。