pymongo 对游标进行for循环操作需要注意的问题

游标for循环是在pl/sql块中使用游标最简单的方式,它简化了对游标的处理。当使用游标for循环时,oracle会隐含的打开游标,提取游标数据并关闭游标。

pymongo中也可以用for循环这种简单的方式对游标进行遍历

如下:

dep_doc = db.hospital_doctor.find({"hospital._id": ObjectId(id), "depart_item.id": ObjectId(dp_id)})

disease_list = []

for i in dep_doc:
        for j in i["disease"]:
            disease_list.append(j)

这样就可以得到dep_doc这个游标中每一个元素中的“disease”字段下的list中的每一个元素,并将这所有元素组成一个新的list--------disease_list


这样做的确十分的方便,但是它也是有问题的:

如果在视图函数中已经对游标dep_doc进行了遍历,那么在jinja2模板中对游标dep_doc的调用会失效,下边的代码将不再会渲染在网页的页面中。

{% for i in dep_doc %}
 


{% endfor %}

pymongo 对游标进行for循环操作需要注意的问题_第1张图片

因此,我们可以对代码进行简单的修改来解决这个问题:

dep_doc = db.hospital_doctor.find({"hospital._id": ObjectId(id), "depart_item.id": ObjectId(dp_id)})

disease_list = []

_dep_doc = []

for i in dep_doc:

_dep_doc.append(i)
        for j in i["disease"]:
            disease_list.append(j)

再将模板占位符dep_doc赋值给_dep_doc即可,显示页面如下图:

pymongo 对游标进行for循环操作需要注意的问题_第2张图片


发生这总情况的原因目前还不得而知,只是在实际操作中发现这个问题,希望后续有更多的发现。

你可能感兴趣的:(python,mongodb)