2017-04-14 16 views
0

SQLデータをmongodbにインポートする際に、埋め込み配列としてテーブルをいくつかマージしましたが、実装中に 'キーエラー'という構文エラーが発生します。 以下は私のコードです。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() 

ここで、私は、アレイ内のサブドキュメントとしてgidgroupnameを保持する組み込み配列名groupsを作成しようとしていました。
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) 

あなたが本当に作成したいスキーマに基づいて推測しているだけです。

関連する問題