我正在用Python编写应用程序的后端,并写入PyMongo数据库。
我正在设置一些服务器,它们希望作为区块链中的节点同时运行。在我的原型中,我需要每个节点在我的数据库中为它们的区块链版本创建一个自己的集合,例如,每个节点都使用“ blockchain- {insert node_id here}”。
我对python还是很陌生,一直在自学,但是努力将'.format'方法与创建这些集合结合在一起。
我知道这可行:
client = MongoClient('mongodb://localhost:27017/')
db = client.my_blockchain
col_blockchain = db.name_of_blockchain
结果:名为“ name_of_blockchain”的集合
但是当我尝试以下操作时,出现错误:
col_blockchain = db['col_my_blockchain_{}'].format(node_id)
结果:错误:
TypeError: 'Collection' object is not callable. If you meant to call the 'format' method on a 'Collection' object it is failing because no such method exists.
或者当我尝试将名称保存在变量中时,我没有得到动态答案:
col_blockchain_name = 'col_my_blockchain_{}'.format(node_id)
col_blockchain = db.col_blockchain_name
结果:为每个正在运行的服务器命名集合“ col_blockchain_name”(因此不是动态的)
(非常感谢,这是我的第一个堆栈溢出问题,请保持友好!)
答案 0 :(得分:2)
此代码:
col_blockchain = db['col_my_blockchain_{}'].format(node_id)
正在寻找一个名为col_my_blockchain_{}
的字典元素,当它检索到它试图在其上调用字符串format
函数时。您想做的是:
col_blockchain = db['col_my_blockchain_{}'.format(node_id)]
在尝试访问字典键之前完全形成字典键。您所需要做的就是移动]
答案 1 :(得分:0)
使用eval关键字调用mongo集合
eval('col_my_blockchain.{}'.format(node_id))
这有效