我有一堆

DELETE FROM user_data WHERE userId = {{ my_user_id }};

在我的sql.j2模板中.

My_user_id是动态的,可能根本不存在. 当它不存在并且其值为空字符串时,我将得到

"Cannot execute SQL 'DELETE FROM user_data WHERE userId = ;' args [None]: (1064, \"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1\")",

执行查询的方法是什么,这样它们就不会删除任何内容,或者如果没有my_user_id,就只跳过它们?

我不能跳过整个Ansible任务,因为模板中还有其他查询.

推荐答案

使用过滤器default并测试绳子的长度.例如,给定库存

shell> cat hosts
host_a

下面的 playbook

shell> cat pb.yml 
- hosts: all

  tasks:

    - debug:
        msg: |
          -- Start
          {% if my_user_id|default('')|length > 0 %}
          DELETE FROM user_data WHERE userId = {{ my_user_id }};
          {% endif %}
          -- End

如果my_user_id未定义或为空,将跳过DELETE FROM ...

shell> ansible-playbook pb.yml 

PLAY [all] ***********************************************************************************

TASK [debug] *********************************************************************************
ok: [host_a] => 
  msg: |-
    -- Start
    -- End

PLAY RECAP ***********************************************************************************
host_a: ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

如果my_user_id不为空,则包括SQL命令

shell> ansible-playbook pb.yml -e my_user_id=12

PLAY [all] ***********************************************************************************

TASK [debug] *********************************************************************************
ok: [host_a] => 
  msg: |-
    -- Start
    DELETE FROM user_data WHERE userId = 12;
    -- End

PLAY RECAP ***********************************************************************************
host_a: ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

在模板中使用if条件.

Sql相关问答推荐

如何在联接条件不匹配时按日期获取上一条记录

如何在幂函数中正确使用Power()和Exp()

PostgreSQL基于2个COLS的任意组合 Select 唯一行

SQL SELECT MOST NEST TIMESTAMP BEAT ORDER

在Postgres中合并相似的表

Redshift PL/pgSQL循环中的参数化列名

来自按PostgreSQL分组的最小日期

使用SQL数据库中的现有列派生或修改几个列

比较SQL中以逗号分隔的字符串

在WHERE EXISTS子查询中,列返回是否重要?

删除所有订单中可用的重复值

显示十进制列,但尽可能显示为整数

VS代码无法识别SQL代码中带括号的字符串

在presto sql中解析带有区域的时间格式

如何在 case 语句中使用聚合?

根据开始时间和结束时间计算has_impact字段

插入行时的行安全策略问题

如何在 DAX 中通过 Window 函数应用订单

如何找到特定时间间隔内的最大和最小日期?

如何跨行合并以删除 SQL 中的空值?