将嵌套集合元素作为 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
函数,可以在 map
和 filter
.
中使用
我使用 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
函数,可以在 map
和 filter
.