记一次python中使用jinja2模板渲染文本

本文记录了一次使用Python的Jinja2模板库处理MongoDB数据的经历,重点介绍了MongoDB的sort、limit和skip方法。MongoDB的sort()用于排序数据,limit()用于限制返回的数据数量,skip()用于跳过指定数量的数据,这些方法在实现高效分页查询时非常有用。例如,使用db.COLLECTION_NAME.find().sort({KEY:1}).limit(NUMBER)和db.COLLECTION_NAME.find().skip(NUMBER).limit(NUMBER)可以实现特定条件的排序、分页查询。

起因:

项目中需要通过web表单实现动态为prometheus配置报警规则,我负责后端,需要对数据进行校验,报警规则有一定的数据格式,但是使用format来格式化的话处理比较麻烦,于是借助了jinja模板:
import jinja2
rules={
"name":"xxxxxxx",
"rules":[
    {
        "alert": "z1",
        "expr": "up == 0",
        "duration": "1m",
        "enable": 1,
        "labels":{"labels1":"label1","label2":"label2"},
        "annotations":{"annotations":"annotations"}
    },
    {
        "alert": "z2",
        "expr": "up == 0",
        "duration": "1m",
        "enable": 1,
        "labels":{"label1":"label1","label2":"label2"},
        "annotations":{"annotation1":"annotation1""annotation2":"annotation2"}
    }
],
"desc":"group DESC NEW1"
}
RENDER_RULES_TEMPLATE = """groups:
- name: {{ rules.name }}
  rules:
{%- for alert in rules.rules %}
  - alert: {{ alert.alert }}
    expr: {{ alert.expr}}
    for: {{ alert.duration }}
    labels:
  {%- for item in alert.labels %}
      {{ item }}: {{ alert.labels[item] }}
  {%- endfor %}
    annotations: 
  {%- for item in alert.annotations %}
      {{ item }}: {{ alert.annotations[item] }}
  {%- endfor %}
{% endfor %}
"""
result = jinja2.Template(source=RENDER_RULES_TEMPLATE).render(rules=rules)
with open('result.yml','w') as fp:
    fp.write(result)

结果展示:

这里写图片描述

MongoDB notes:

mongodb sort limit和skip用法

检索数据可以使用sort()方法来对数据进行排序,指定排序字段,并使用1或-1来指定排序方式是升序或降序。类似于SQL语句中的order by语句。

可以使用limit()方法来读取指定数量的数据,还可以使用skip()方法来跳过指定数量的数据。对分页性能上面效率非常高。

  1. 语法

db.COLLECTION_NAME.find().sort({KEY:1})

db.COLLECTION_NAME.find().limit(NUMBER)

db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

示例:

db.col.find({},{“title”:1,_id:0}).limit(2)

第一个 {} 放 where 条件,为空表示返回集合中所有文档。
第二个 {} 指定那些列显示和不显示 (0表示不显示 1表示显示)。

想要读取从 10 条记录后 100 条记录,相当于 sql 中limit (10,100)。

db.COLLECTION_NAME.find().skip(10).limit(100)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值