Один или несколько { (фигурные скобки) в Python для форматирования строки

В следующем запросе ETL мы видим использование двойных фигурных скобок.

query_data = """
SELECT {}
FROM {}
WHERE '{{}}'
ORDER BY '{{}}'
"""

Обычно для настройки строки используется одна пара квадратных скобок с форматом. Итак, мне интересно, какая функциональность предполагает использование одной или нескольких фигурных скобок для форматирования строки?


person Miguel Trejo    schedule 08.01.2020    source источник


Ответы (1)


Количество фигурных скобок, которое мы собираемся использовать, зависит от того, сколько раз мы собираемся форматировать строку. В вашем примере мы впервые форматируем запрос, мы используем одинарные скобки следующим образом:

first_format = query_data.format("id", "table")

Теперь второй раз форматируем

second_format = first_format.format("id != '1'", "id")

Что должно отображать следующую строку

SELECT id
FROM table
WHERE id != '1'
ORDER BY id

Однако, если вы форматируете строку три или более раз, управление количеством фигурных скобок становится невозможным, потому что вам нужно 2^(n-1) количество фигурных скобок для каждого n-кратного форматирования. . Проиллюстрируем это на примере

query_data = """
    SELECT {}
    FROM {}
    WHERE {{}}
    AND {{}} > {{{{}}}} 
    OR {{}} != {{{{{{{{}}}}}}}}
    ORDER BY {{}}
    """

first_format = query_data.format("id", "table")
second_format = first_format.format("id != '1'","date", "name", "id")
third_format = second_format.format("2020-01-07")
fourth_format = third_format.format("john")

Должен отображать следующий вывод

 SELECT id
 FROM table    
 WHERE id != '1'   
 AND date > 2020-01-07    
 OR name != john
 ORDER BY id
person Miguel Trejo    schedule 08.01.2020