首页 > 解决方案 > 在 Python 中从 JSON 字符串中提取数据时出错(使用 Redshift)

问题描述

我正在尝试使用 Python 中的 SQL 从 JSON 字符串中提取数据。我收到一个错误

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 数据库。谢谢

标签: pythonjsonamazon-redshift

解决方案


如果您只想格式化后一个出现的{},请使用 . 转义第一个'{{}}'

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)))

推荐阅读