【问题标题】:Import Query String from AWS API Gateway into Lambda Python Function将查询字符串从 AWS API Gateway 导入 Lambda Python 函数
【发布时间】:2025-12-05 20:45:02
【问题描述】:

我正在创建一个 Lambda 函数,它将查询字符串信息导入数据库,但在我的 python 代码中访问查询字符串本身时遇到了一些问题。我已经在 API Gateway 中设置了正确的字符串变量,并且还从集成请求部分启用了 Lambda 代理集成。

一些文章和之前的回复说我应该这样做:

event["queryStringParameters"]['querystring1']

我已经设置了一个处理程序,我很好奇如何将请求正文传递给函数my_handler

这是代码的sn-p:

import logging, traceback, os

#environment variables
ep = os.environ["EP"]
p = os.environ["PORT"]
du = os.environ["USER"]
pw = os.environ["PASSWORD"]
db = os.environ["DATABASE"]

#query string variables
def my_handler(event):
    servername = event["queryStringParameters"]["servername"]
    hostDesc = event["queryStringParameters"]["description"]
    hostRegion = event["queryStringParameters"]["region"]
    response = servername + hostDesc + hostRegion
    return { 
        'status code' : 200,
        'body' : json.dumps(response)
    } 

【问题讨论】:

  • 操作事件数据的代码需要在处理函数中:docs.aws.amazon.com/lambda/latest/dg/python-handler.html
  • event 作为参数之一的 lambda 处理函数在哪里?
  • 我已将查询字符串变量部分更改为从事件处理程序中提取。它在上面的代码中列出。我现在面临的问题是将请求正文放入处理程序。我想我可以调用这个函数并以某种方式传递它,但我只是在寻找到请求库的链接。如果我已经使用 JSON 请求正文运行 Lambda 函数,这似乎是多余的。有什么想法吗?

标签: python amazon-web-services aws-lambda aws-api-gateway query-string


【解决方案1】:

这是由于错误造成的。

我试图通过使用处理程序结果在脚本中稍后通过全局字符串传递 SQL 查询。应该做的是将查询定义为一个函数并在处理程序期间调用它。一旦处理程序从正文请求中获得事件变量,就可以将它们传递给函数。

前:

import logging, traceback, json

def query(hostServername, hostDesc, hostRegion):
    return "SELECT * FROM TABLE_NAME WHERE host ='"+hostIP+"' AND '"+hostPort+"' AND '"+hostServername+"'"

#query string variables
def my_handler(event):
    server = event["queryStringParameters"]["servername"]
    host = event["queryStringParameters"]["description"]
    region = event["queryStringParameters"]["region"]
    try:
        cnx = some_database_connect_function()
        cursor=cnx.cursor()

        try:
            cursor.execute(query(server, host, region))
            return{
            'Status Code' : 200
            }
        except:
            return log_err ("ERROR: Cannot execute cursor.\n{}".format(
                traceback.format_exc()) )

    except:
        return log_err("ERROR: Cannot connect to database from handler.\n{}".format(
            traceback.format_exc()))

【讨论】: