无法使用sqlalchemy的'json_extract_path_text'(Redshift)?

时间:2016-06-29 17:05:17

标签: python sqlalchemy amazon-redshift pandasql

我需要运行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...' 

< - 有点^指向extra_ctx上的'e'。

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

1 个答案:

答案 0 :(得分:0)

语法错误。 { 不需要。不会引发SQL工作台的错误,但是当我运行python时会发生错误。

echo '1
2
3
4
5
6
7
8
9' | while read line; do echo | python -u tmp.py $line; done
PRESS ENTER
you wrote 1
done
PRESS ENTER
you wrote 2
done
PRESS ENTER
you wrote 3
done
PRESS ENTER
you wrote 4
done
PRESS ENTER
you wrote 5
done
PRESS ENTER
you wrote 6
done
PRESS ENTER
you wrote 7
done
PRESS ENTER
you wrote 8
done
PRESS ENTER
you wrote 9
done

工作得很好。谢谢,Ilja