通过使用pymongo,我可以连接到这样的集合:
conn = pymongo.MongoClient()
db = conn.example
collection = db.col
然后,我可以连接到名为“example”的数据库和名为“col”的集合。
我还可以编写类似打击的代码:
dbname = 'example'
collectionName = 'col'
conn = pymongo.MongoClient()
db = conn[dbname]
connection = db[collectionName]
这两个代码块也会做同样的事情。
现在,我使用mongoengine连接到MongoDB,我有一个带collectionA的数据库,我在一个名为'model.py'的文件中也有一个类:
class collectionA(Document):
A=StringField()
B= StringField()
所以我只能使用:
import model
x = model.collectionA.object()
查询数据。
因为我有很多收藏品,所以我想使用
model[collectionName].object()
查询数据,但它引发异常,似乎mongoengine不能支持模型[xxx]的形式来连接集合。
那么,有什么方法可以解决这个问题吗?
答案 0 :(得分:1)
您正在将model.py导入为模块。方括号语法是一个"快捷方式"到对象的getitem
方法。 Because everything in python is an object,包括模块,您获得TypeError
因为模块没有getitem
方法。
您尝试实现的目标可以使用inspect
模块完成:
import inspect
import model
collections = dict(inspect.getmembers(model, inspect.isclass))
collections[collectionName].object()
现在可以使用了。
FWIW这似乎不是非常pythonic和mongoengine的力量是你正在将文档映射到明确定义的类,这似乎有点混淆。这使得引入难以发现的错误变得非常容易,并且还需要额外的击键,因为现在每个类都被引用为字符串。