无法将“json_extract_path_text”(Redshift)与 sqlalchemy 一起使用? [关闭]

Posted

技术标签:

【中文标题】无法将“json_extract_path_text”(Redshift)与 sqlalchemy 一起使用? [关闭]【英文标题】:Unable to use the 'json_extract_path_text' (Redshift) with sqlalchemy? [closed] 【发布时间】:2016-06-29 17:05:16 【问题描述】:

我需要运行 SQL (Redshift) 查询,我目前正在使用 jupyter / ipython 笔记本。我有 sqlalchemy-redshift。

from sqlalchemy import create_engine, text
engine_string = databasepwrd.redshiftconnection()
engine = create_engine(engine_string)
from pandas.io import sql

def run_query(sequalese):
    '''returns a dataframe given a string SQL query'''
    sql_query = text(sequalese)
    df = sql.read_sql(sql_query,engine )
    return df

run_query("""
SELECT deviceid, json_extract_path_text(extra_ctx, 'skip_login')
FROM table
LIMIT 10""")

其中 'extra_ctx' 是 redshift 表中包含 json 字符串的列。

我知道我的查询有效,因为它在我直接通过 SQL Workbench 查询我们的数据库时运行。当我尝试在笔记本中运行它时,我收到错误:

'ProgrammingError: (psycopg2.ProgrammingError) syntax error at or near "extra_ctx"
LINE 1: SELECT user, json_extract_path_text(extra_ctx, 'skip_lo...' 

关于可能导致问题的任何想法?谢谢你的帮助。

【问题讨论】:

检查你如何在 SQL 中调用function,语法错误是正确的。您应该将 json 值 from_json(例如列)作为第一个参数,并将可变文本值作为 path_elems 传递。您当前且唯一的论点甚至不是有效的 SQL。换句话说,去掉花括号。 感谢您的快速回答。你是对的,显然我不需要 。我一定是看错了文档——谢谢。 【参考方案1】:

语法错误。 不需要。不会引发 SQL 工作台错误,但当我通过 python 运行时会引发错误。

SELECT deviceid, json_extract_path_text(extra_ctx, 'skip_login')
FROM table
LIMIT 10

工作正常。谢谢,伊利亚

【讨论】:

以上是关于无法将“json_extract_path_text”(Redshift)与 sqlalchemy 一起使用? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

无法将 createdAt 和 updatedAt 保存为日期时间值,也无法将后端保存为前端

C# 无法将类型为“System.Byte[]”的对象强制转换为类型“System.Data.DataTable

无法将类型为“System.Collections.Generic.List`1[EPMS.Domain.SingleItem]”的对象强制转换为类型“EPMS

无法将 .json 文件从 CSV 下载到 JSON 转换并且无法将 JSON 转换为 CSV

无法将 ReactiveUI 添加到 NUnit 测试项目

“无法将图像数据写入路径” - Laravel 图像干预