2017-04-14 35 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) 

我只是猜測,根據你的問題,你真的想創建的架構。