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

Posted

技术标签:

【中文标题】如何在python中将日期从外部文件导入sql时处理引号(\'\')?【英文标题】:how to handle quote ('') while importing date from external file to sql in python?如何在python中将日期从外部文件导入sql时处理引号('')? 【发布时间】:2020-08-02 13:00:51 【问题描述】:

我有一个 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) Error while 在 Impala 中执行查询:[HY000]:AnalysisException:第 4 行中的语法错误:\n...re Effective_date between %(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)') 因为那个参数

我正在导入缺少

''

引用(虽然它们是字符串类型)因此查询返回错误有什么办法可以处理它..

【问题讨论】:

我认为你的文件应该是这样的:'effective_date_raw_from' : '2019-08-30' 'effective_date_raw_to' : '2019-09-02' @TrishantPahwa:YAML 不需要引号。 如果您包含错误消息(包括回溯)会有所帮助。 我猜我是这样把引号放在那里的? ...between "effective_date_raw_from" and... @Jasmijn 我已经添加了错误信息... 【参考方案1】:

解释在错误信息中:

遇到:%

预期:CASE、CAST、DEFAULT、EXISTS、FALSE、IF、INTERVAL、NOT、NULL、REPLACE、TRUNCATE、TRUE、IDENTIFIER

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

您可能会取得更大的成功:

j = JinjaSql(param_style='qmark')

j = JinjaSql(param_style='named')

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于如何在python中将日期从外部文件导入sql时处理引号('')?的主要内容,如果未能解决你的问题,请参考以下文章

如何在sql中将数字转换为日期

如何在 python 脚本中将 .obj 文件从搅拌机导入搅拌机游戏引擎

在excel中将数据从外部csv附加到表中

如何在 SQL Select 语句中将文本字段更改为日期字段

如何使用Debezium从MS SQL中将250张表导入Kafka

如何使用 Oracle SQL 验证 txt 文件中的日期?