Ошибка при извлечении данных из строки JSON в Python (с использованием Redshift) - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь извлечь данные из строки JSON, используя SQL в Python.Я получаю сообщение об ошибке

IndexError: tuple index out of range

Ниже приведен пример запроса, который я пытаюсь

dwh_cursor.execute(sql.SQL("""SELECT a.id, a.name,B.setup as setup,
         CASE WHEN (setup::JSON -> 'refcol')::TEXT = '{}' THEN 'data_missing'
         ELSE 'data_correct' END AS ColumnMapping
         FROM sales a join details b on a.sale_id = b.id 
        and a.name = {}""").format(sql.Literal(name)))

Приведенный выше запрос выполняется нормально, если я исключаю последнее выражение, извлекающее данные из JSON.Ошибка возникает только тогда, когда я включаю этот столбец извлечения JSON (имя столбца: ColumnMapping).Может ли кто-нибудь руководство о том, как это исправить.

Я использую Redshift DB.Спасибо

1 Ответ

0 голосов
/ 18 октября 2018

Если вы хотите отформатировать только последнее вхождение {}, экранируйте первое с помощью '{{}}'.

dwh_cursor.execute(sql.SQL("""SELECT a.id, a.name,B.setup as setup,
     CASE WHEN (setup::JSON -> 'refcol')::TEXT = '{{}}' THEN 'data_missing'
     ELSE 'data_correct' END AS ColumnMapping
     FROM sales a join details b on a.sale_id = b.id 
    and a.name = {}""").format(sql.Literal(name)))
...