从外部文件导入日期到 python 中的 sql 时如何处理引号 ('')?
how to handle quote ('') while importing date from external file to sql in python?
我有一个 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 ^\ nEncountered: %\nExpected: CASE, CAST, DEFAULT, EXISTS, FALSE, IF, INTERVAL, NOT, NULL, REPLACE, TRUNCATE, TRUE, IDENTIFIER\n\nCAUSED BY: 异常:语法 error\n (110) (SQLPrepare )')
因为参数
我正在导入缺少
''
引用(虽然它们是字符串类型)因此查询返回错误有什么办法可以处理它..
我认为你应该使用 json 模块来转换字符串文件
import json
file = json.loads(open(r'C:\Users\anil\param.yaml'))
错误信息中有解释:
Encountered: %
Expected: 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')
我有一个 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 ^\ nEncountered: %\nExpected: CASE, CAST, DEFAULT, EXISTS, FALSE, IF, INTERVAL, NOT, NULL, REPLACE, TRUNCATE, TRUE, IDENTIFIER\n\nCAUSED BY: 异常:语法 error\n (110) (SQLPrepare )') 因为参数
我正在导入缺少
''
引用(虽然它们是字符串类型)因此查询返回错误有什么办法可以处理它..
我认为你应该使用 json 模块来转换字符串文件
import json
file = json.loads(open(r'C:\Users\anil\param.yaml'))
错误信息中有解释:
Encountered: %
Expected: 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')