python - 同时使用 Python f-strings 和 Jinja

标签 python python-3.x jinja2

我正在尝试用 Python 编写一个简洁的 SQL 查询字符串,以同时使用 f-strings 和 Jinja。
背景信息:我正在编写一个在 Airflow 中使用的查询。
这不起作用:

query_string = f"""
        SELECT
            COUNT(DISTINCT case_id) AS counts
        FROM
            `{{var.value.gcp_project}}.{{var.value.dataset_prefix}}user.person`
        WHERE
            identified_on = PARSE_DATE('%Y-%m-%d', '{YESTERDAY_DATE_STR}')
           """
它产生的查询字符串为:
SELECT
    COUNT(DISTINCT case_id) AS counts
FROM
    `{var.value.gcp_project}.{var.value.dataset_prefix}user.person`
WHERE
    identified_on = PARSE_DATE('%Y-%m-%d', '2020-09-07')
所以它做了 f-string 值替换而不是 Jinja。
如何让 f-strings 和 Jinja 同时工作?

最佳答案

我发现将大括号加倍 {{}}作品。
双大括号被转义为一个,因为 Jinja 需要其中的 2 个,所以 4 个括号就可以了。
所以这个查询:

query_string = f"""
        SELECT
            COUNT(DISTINCT case_id) AS counts
        FROM
            `{{{{var.value.gcp_project}}}}.{{{{var.value.dataset_prefix}}}}user.person`
        WHERE
            identified_on = PARSE_DATE('%Y-%m-%d', '{YESTERDAY_DATE_STR}')
           """
返回格式正确的查询:
SELECT
    COUNT(DISTINCT case_id) AS counts
FROM
    `gcp_project.dataset_user.person`
WHERE
    identified_on = PARSE_DATE('%Y-%m-%d', '2020-09-07')

关于python - 同时使用 Python f-strings 和 Jinja,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63788781/

相关文章:

python - 如果数据冗余,重用预建字典的有效方法是什么?深拷贝太慢

python - 如何子类化构建命令?

python - 如何在 venv 中制作 Flask 应用程序与 Anaconda 一起工作

python - Apache Airflow : Pass variable in jinja include

python - flask 的 .add_url_rule() 中的 "endpoint"是什么?

python - 如何使用 pySerial 在 python 中配置 tty?

python - Django 管理站点根据输入自动填充组合框

python - return 语句中的语法错误

python - 我收到类型错误 : can only concatenate str (not "int") to str

python - 在 Flask 中使用 Jinja2 获取嵌套的字典项