【发布时间】:2021-06-08 19:57:15
【问题描述】:
我正在制作一个无服务器电话目录搜索应用程序。 有两个文件:index.html 和 lambda_function.py
index.html 有一个 JS 函数、一个用于输入名称的文本字段和一个搜索按钮。 Lambda_function.py 包含 处理 CSV 的代码。
我无法将 index.html 文本框中的值传递给 lambda_function.py SQL 查询。 浏览器调试器报错。
errorMessage: "name 'name_Person' is not defined"
errorType: "NameError"
stackTrace: Array [ " File \"/var/task/lambda_function.py\", line 12, in lambda_handler\n sql_q = \"SELECT * FROM s3object s where s.\\\"Name\\\" = ('%s')\" %name_Person\n" ]
在这种情况下,将用户输入的名称传递给 SQL 查询的正确方法是什么?
Index.html 内容
<script>
function FindInPhoneBook() {
var name_person = $('#name').val();
if (name_person == "")
return;
fetch('https://xxx.eu-west-3.amazonaws.com/SecondStage', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: '{ "command": "find", "name_Person":"'+name_person+'" }'
}).then(function(data) {
$('#list_personal').val(data)
find();
data.json().then(function(bodyData) {
console.log(bodyData);
$('#list_personal').text(bodyData);
})
})
}
</script>
<div class = "border">
<input id="name" type="text">
<button onclick="FindInPhoneBook()">
Find
</button>
<br></br>
<div id='list_personal'></div>
</div>
lambda_function.py content
import json
import boto3
def lambda_handler(event, context):
res = ''
s3 = boto3.client('s3')
if(len(event) == 0):
with open('index.html','r') as file:
return file.read()
elif event['command'] == 'find':
#name = 'Vinod'
sql_q = "SELECT * FROM s3object s where s.\"Name\" = ('%s')" %name_Person
resp = s3.select_object_content(
Bucket='chumbacket',
Key='sample_data.csv',
ExpressionType='SQL',
Expression=sql_q,
InputSerialization = {'CSV': {"FileHeaderInfo": "Use"}, 'CompressionType': 'NONE'},
OutputSerialization = {'CSV': {}},
)
for event in resp['Payload']:
if 'Records' in event:
records = event['Records']['Payload'].decode('utf-8')
return records
elif 1==1:
pass
return res
【问题讨论】:
标签: javascript python-3.x amazon-web-services amazon-s3 aws-lambda