将嵌套集合元素作为 Python 中的对象返回

Returning nested collection elements as objects in Python

我使用 Python 在我的 mongo 数据库中插入了以下文档:

@cherrypy.expose
def create(self):
    client = MongoClient()
    db = client.database_name        
    result = db.users.insert_one({
        "email": "email@email.com",
        "company": {
            "name": "ABC Company"
        }
    })

现在,我已经使用变量 (company_name) 存储了集合查询的结果:

 @cherrypy.expose
 def result(self):
     client = MongoClient()
     db = client.database_name        
     cursor = db.users.find({"email":"email@email.com"})
     for document in cursor:
        email = document["email"]
        company_name = document["company"]["name"]
     return company_name

我想 return 嵌套元素作为对象,例如:company.name 而不是作为变量 (company_name)

如何修改结果函数以将集合结果存储为对象属性?

1 - 我使用 CherryPy 作为 HTTP 服务器。我没有使用任何 ORM,也没有使用模板引擎。

使用 collections 模块中的 namedtuple

from collections import namedtuple
company = namedtuple('company ', 'name') 
document = namedtuple('document ', 'email, company')

然后在循环内:

for row in cursor:
    result = document(row["email"], company(row["company"]["name"]))
    yield result # or 'return result' if there is only one of them

namedtuple 你会访问你的参数(但只读,因为它是一个元组)作为位置(通过索引 [0]、[1] 等)和作为属性(result.email ).所有属性也是只读属性,因此它们带有预烘焙的 fget 函数,可以在 mapfilter.

中使用