在Python Lambda函数的Redshift插入语句中使用变量
解决Python Lambda中Redshift插入变量的问题
问题原因
你直接将Python变量名写入SQL字符串时,Redshift会把var1这类标识符当作SQL字面量处理,而不会解析为Python变量的值,因此执行失败。此外,这种写法存在SQL注入风险,不建议使用。
最优解决方案:参数化查询
使用Redshift Data API的Parameters参数传递变量,这是最安全、规范的方式,无需手动处理引号,还能避免SQL注入:
var1 = 'aaaa' var2 = 'bbbb' var3 = 'cccc' # 使用?作为占位符 query1 = "insert into dbname.tablename values(?, ?, ?)" response = rsclient.execute_statement( ClusterIdentifier='xxxxx', Database='yyyy', DbUser='zzzz', Sql=query1, StatementName='examplestatement', Parameters=[var1, var2, var3] # 按占位符顺序传入参数 )
备选方案:字符串格式化(仅适用于可信变量)
如果变量内容完全可信(无外部输入),也可以用Python的f-string或str.format()拼接SQL语句,但需要手动为字符串变量添加单引号:
var1 = 'aaaa' var2 = 'bbbb' var3 = 'cccc' # f-string拼接 query1 = f"insert into dbname.tablename values('{var1}', '{var2}', '{var3}')" # 或用str.format() # query1 = "insert into dbname.tablename values('{}', '{}', '{}')".format(var1, var2, var3) response = rsclient.execute_statement( ClusterIdentifier='xxxxx', Database='yyyy', DbUser='zzzz', Sql=query1, StatementName='examplestatement' )
注意:若变量包含用户输入或不可信内容,绝对不能用这种方式,否则会引发SQL注入攻击。
内容的提问来源于stack exchange,提问作者Ludwig
相关产品推荐
相关产品推荐

