从 Excel sheet 内容 [Python] 创建 Mongodb 查询命令

Create Mongodb Query Command from Excel sheet Content [Python]

我正在尝试从 excel sheet 内容创建查询,并使用 pymongo.

将它们转换为 Mongodb 的命令

这是我从excel sheet 阅读Parameter 列并在每个内容中添加"'" + s +"':1," 的简化格式。然后通过 query=query+i 附加所有值以使查询 string.All 很好,当我将查询打印为字符串但在 mongo 连接中使用它时没有结果!

正如我发现的那样,在调试模式下,通过附加查询字符串,一些额外的字符出现在字符串中,如 '{\'p1\':1,\'p2\':1,\'p3\':1,\'p4\':1}',这似乎不正确,并且添加了一些额外的字符。应该有另一种方法来附加查询字符串来获取这些!

调试模式下的查询字符串 '{\'p1\':1,\'p2\':1,\'p3\':1,\'p4\':1}'

希望在 mongo 连接中使用查询字符串 {'p1':1,'p2':1,'p3':1,'p4':1}

!!!为了检查我的代码,我在每行前面添加了调试结果作为注释

s = df['Parameter']            #(0, "'p1':1,") (1, "'p2':1,") (2, "'p3':1,") (3, "'p4':1,")
s = "'" + s +"':1,"           
for i in s:
      query=query+i            #'\'p1\':1,\'p2\':1,\'p3\':1,\'p4\':1,'
query="{"+query+"}"
query=query.replace(",}","}")
print(query)                  #'{\'p1\':1,\'p2\':1,\'p3\':1,\'p4\':1}'

client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["S"]              # Database Name
col = db["H"]                 # Collection Name
x = col.find({}, query)
df = pd.DataFrame(x)

从根本上说,您的方法永远行不通,因为 find()filter 参数必须是 dict,而您正试图创建一个看起来像这样的 str dict.

您没有在代码中显示电子表格的样子,而是说它叫做 c:/temp/query.xlsx 并且看起来像这样:

那么你的代码就变成几行了:

df = pd.read_excel('c:/temp/query.xlsx', sheet_name='Sheet1', index_col='Parameter')
query = df.to_dict().get('Include')
print(query)

结果:

{'p1': 1, 'p2': 1, 'p3': 1, 'p4': 1}