从 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}
我正在尝试从 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}