2017-07-13 38 views
0
sqlCur.execute('SELECT TOP 10 '+fld+cc.joins+cc.where,custo) 
tub=sqlCur.fetchall() 

從上面的查詢中,我從SQL Server獲取數據到Python元組。我將這些數據轉換爲OrderedDict()列表,然後使用pymongo中的insert_many將數據推送到mongodb。
要使用mongo列映射SQL列,我有一個OrderedDict(cols),它的用法如下。python:從字符串中刪除引號以執行命令或映射字符串值到密鑰

sqlCol=list(cols.keys()) 
mongoCol=list(cols.values()) 

insArray=[] 
for b in tub: 
    doc=OrderedDict() 
    lst=['b.'+x for x in sqlCol] 
    for v in range(len(mongoCol)): 
     ii=lst[v] 
     doc[ll[v]]=lst[v] 
    insArray.append(doc) 

但是,結果我看到了列名的代替因爲列表lst是具有列名爲字符串,但它需要與mongoColumns映射不報價
我該如何做到這一點或有沒有更好的方法來處理這個問題?
順便說一句,我使用的的Python 3.6

+0

你能分享其中的一個sqlCur返回 – GThamizh

+0

@GThamizh樣本數據:我知道了有一個像[( 'GoDad',73399, 'C'),('GoDad元組的列表',73483,'我')] –

回答

0

試試這個,考慮爲蒙戈DB收集列mongo_cols(這是樣品,你可以用自己的Mongo的數據庫收集架構修改)

mongo_cols = ("name","id","status") 

values = [("GoDad", 73399, "C"), ("GoDad", 73483, "I")] 

keys_values_insert =[dict(zip(mongo_cols, k)) for k in values] 

print (keys_values_insert) # [{'status': 'C', 'name': 'GoDad', 'id': 73399}, {'status': 'I', 'name': 'GoDad', 'id': 73483}] 

蒙戈DB - 過程

> db.products.insert([{'status': 'C', 'name': 'GoDad', 'id': 73399}, {'status': 'I', 'name': 'GoDad', 'id': 73483}]) 
> 
> 
> db.products.find() 
{ "_id" : ObjectId("5967be93162ab4d87801d2ea"), "status" : "C", "name" : "GoDad", "id" : 73399 } 
{ "_id" : ObjectId("5967be93162ab4d87801d2eb"), "status" : "I", "name" : "GoDad", "id" : 73483 }