python – 在Redshift查询中转义引号
发布时间:2020-12-20 13:45:24 所属栏目:Python 来源:网络整理
导读:我试图将我的代码重构为PEP8标准以便于阅读,但我正在努力逃避SQL查询中的引号. 我有2个查询.第一个是简单的SQL查询.第二个是Redshift UNLOAD命令. query = '''SELECT * FROM redshift_table LEFT JOIN (SELECT DISTINCT * FROM redshift_view) v ON redshift
我试图将我的代码重构为PEP8标准以便于阅读,但我正在努力逃避SQL查询中的引号.
我有2个查询.第一个是简单的SQL查询.第二个是Redshift UNLOAD命令. query = '''SELECT * FROM redshift_table LEFT JOIN (SELECT DISTINCT * FROM redshift_view) v ON redshift_table.account_number = v.card_no WHERE timestamp < date_trunc('day',CURRENT_DATE) AND timestamp >= (CURRENT_DATE - INTERVAL '1 days')''' unload = '''UNLOAD ('%s') to '%s' credentials 'aws_access_key_id=%s;aws_secret_access_key=%s' delimiter as '%s'parallel off ALLOWOVERWRITE''' % (query,s3_path,access_key,aws_secret,file_delimiter) 因为sql查询嵌入在UNLOAD命令中,所以我只能通过在前面添加3个反斜杠来转义引号来使它工作:’day’变为///’day ///’. 任何帮助是极大的赞赏.谢谢. 解决方法
由于您只需要在unload命令中的引号之前插入反斜杠,因此使用转义函数可以正常工作.这是一个例子.
def escape_quote(value): return value.replace("'","'") query = '''SELECT * FROM redshift_table LEFT JOIN (SELECT DISTINCT * FROM redshift_view) v ON redshift_table.account_number = v.card_no WHERE timestamp < date_trunc('day',CURRENT_DATE) AND timestamp >= (CURRENT_DATE - INTERVAL '1 days')''' unload = '''UNLOAD ('%s') to '%s' credentials 'aws_access_key_id=%s;aws_secret_access_key=%s' delimiter as '%s'parallel off ALLOWOVERWRITE''' % (escape_quote(query),file_delimiter) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |