动态遍历SQL列

时间:2020-09-09 18:55:46

标签: python sql database pandas postgresql

我正在尝试从副本中更新table1,table2已给出列列表。

在给定列名列表的情况下,如何编写sql命令从table2动态更新table1中的所有列?

我正在尝试避免对sql查询中的column1,column2进行硬编码。

frozenset

1 个答案:

答案 0 :(得分:1)

您可以尝试以下选项:

column_names = ['column1', 'column2']

sql_cmd = (""" UPDATE table1 SET table1.{} = table2.{}, 
                                 table1.{} = table2.{}
                FROM table2 WHERE table1.id = table2.id""").format(column_names[0], column_names[0], column_names[1], column_names[1])

print(sql_cmd)

使用宏对Jinja2代码进行采样:

{% macro macro_join_condition(tab_prefix_1, tab_prefix_2, columns) %}
  {% for col in columns %}
    {% if loop.first %}
      {{ tab_prefix_1 }}{{ col }} = {{ tab_prefix_2 }}{{ col }}
    {% else %}
      and {{ tab_prefix_1 }}{{ col }} = {{ tab_prefix_2 }}{{ col }}
    {% endif %}
  {% endfor %}
{% endmacro %}

select *
from source_data sd right join target_data td on {{ macro_join_condition('td.','sd.', params.primaryKeyList) }}