[英]how to put all the templates in a single file and access them in jinja2 from python code
我有 30 到 40 个 SQL 查询,我想使用 jinja2 模板文件来存储查询,以便分别存储 python 代码和 SQL 查询
对于每个 SQL 查询,我正在创建一个单独的模板文件并使用下面给出的 python 代码加载该模板
from jinja2 import Environment, FileSystemLoader
def main():
file_loader = FileSystemLoader('path to templates')
template_group = Environment(loader=file_loader)
select_template = template_group.get_template("select_query.txt")
print(select_template.render())
select_query.txt 的内容是
select * from employee.details where department="cse"
这对于需要 3 个单独模板文件的 3 个查询来说很好,但是我有 30 到 40 个查询,并且将来可能会增加,
有没有办法将所有 SQL 查询放在一个模板文件中,并从 python 代码访问这些查询
提前致谢
您应该创建将模板存储为 .py 文件而不是 txt 的文件,因为您希望将其导入到您的应用程序文件中。 然后您可以创建一个变量来存储基本的 SQL 模板。 这个 SQL 模板可以有占位符,所以你可以将类似的查询压缩成一个。 例如:
sum_emails_by_event = """
SELECT
date_,
{%- for event in events %}
SUM(CASE WHEN event_type = '{{event}}' THEN 1 END) AS num_{{event}}
{%- if not loop.last -%}
,
{%- endif -%}
{%- endfor %}
FROM raw_events
GROUP BY 1
ORDER BY 1 ASC
"""
print(Template(sum_emails_by_event).render(events=['send', 'deliver', 'open', 'click']))
此代码将遍历事件列表并为事件列表的每个项目创建 SUM 语句。 如果您只是将它们存储在一个 txt 文件中,您将不得不存储该查询的大量不同变体。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.