在python中将日期从外部文件导入到sql时如何处理引号('')?

时间:2020-08-02 13:00:51

标签: python dynamic-sql impala

我有一个param.yaml文件,其内容为

effective_date_raw_from : '2019-08-30'
effective_date_raw_to : '2019-09-02'

但是当我以python脚本导入

print(" start : " + str(datetime.datetime.now()))
    with open(r'C:\Users\anil\param.yaml') as file:
        param_list = yaml.load(file, Loader=yaml.FullLoader)
        print(param_list)
        print(param_list['effective_date_raw_from'])
        print(param_list['effective_date_raw_to'])
        print(type(param_list['effective_date_raw_from']))
        print(type(param_list['effective_date_raw_to']))

query_template = """
            select *
            from  transaction
            where effective_date between {{effective_date_raw_from}} and {{effective_date_raw_to}} and rnk_domain = 'RAW'
            """
    j = JinjaSql(param_style='pyformat')
    query, bind_params = j.prepare_query(query_template, param_list)
    print(query)
    print(bind_params)
    df_raw = pd.read_sql(query, conn, params=bind_params)
    print(df_raw) 

我遇到错误,即:('HY000','[HY000] [Cloudera] [ImpalaODBC](110)错误,而 在Impala中执行查询:[HY000]:AnalysisException:第4行中的语法错误:\ n ...%(effective_date_raw_from_1)之间的有效日期... \ n ^ \ n遇到:%\ n预期:CASE,CAST,DEFAULT,EXISTS ,FALSE,IF,INTERVAL,NOT,NULL,REPLACE,TRUNCATE,TRUE,IDENTIFIER \ n \ n原因:异常:语法错误\ n(110)(SQLPrepare)') 因为参数

我要导入的文件丢失了

''

quote(尽管它们是字符串类型),所以查询返回错误,有任何方法可以处理它。.

2 个答案:

答案 0 :(得分:1)

说明在错误消息中:

遇到:%

预期:大小写,投射,默认,存在,错误,IF,间隔,NOT,NULL,替换,截断,TRUE,标识符

这意味着您使用的SQL引擎不支持参数的“ pyformat”样式。

您可能会在以下方面获得更大的成功

j = JinjaSql(param_style='qmark')

j = JinjaSql(param_style='named')

答案 1 :(得分:-1)

我认为您应该使用json模块转换字符串文件

import json
file = json.loads(open(r'C:\Users\anil\param.yaml'))