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 %}
 <ul class="dept-doc">
<li class="dept-doc-li02"><tt><a href="#">{{ i.name }}</a></tt> <p>全部</p><p>{{ i.level }}</p></li>
<li class="dept-doc-li03">
<span>擅长:</span>{{ i.goodat }}
</li>
</ul>
{% endfor %}


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

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即可,显示页面如下图:



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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值