sql - 如何定义 Lambda 变量以通过 API Gateway 查询 Redshift
问题描述
我遇到了如何为 API Gateway 设置参数以使用 Lambda 函数查询 Amazon Redshift 的问题。
我的连接工作正常,但我一直得到全表响应。我需要定义变量,用户可以查询特定的参数、值和模式
有人可以建议一个如何设置它的例子吗
我的配置是:
#!/usr/bin/env python
import psycopg2
import logging
import traceback
import json
from os import environ
query="SELECT * from public"
logger=logging.getLogger()
logger.setLevel(logging.INFO)
def make_connection():
conn=psycopg2.connect(dbname= 'database', host='redshift-cluster.amazonaws.com',
port= '5439', user= 'user', password= 'password')
conn.autocommit=True
return conn
def log_err(errmsg):
logger.error(errmsg)
return {"body": errmsg , "headers": {}, "statusCode": 400,
"isBase64Encoded":"false"}
logger.info("Cold start complete.")
print('Loading Function')
def handler(event,context):
try:
cnx = make_connection()
cursor=cnx.cursor()
try:
cursor.execute(query)
except:
return log_err ("ERROR: Cannot execute cursor.\n{}".format(
traceback.format_exc()) )
try:
results_list=[]
for result in cursor: results_list.append(result)
print(results_list)
cursor.close()
except:
return log_err ("ERROR: Cannot retrieve query data.\n{}".format(
traceback.format_exc()))
return {"body": str(results_list), "headers": {}, "statusCode": 200,
"isBase64Encoded":"false"}
except:
return log_err("ERROR: Cannot connect to database from handler.\n{}".format(
traceback.format_exc()))
finally:
try:
cnx.close()
except:
pass
if __name__== "__main__":
handler(None,None)
解决方案
psycopg2
我建议不要使用,而是使用 Amazon Redshift Data API。它提供了一种在 Amazon Redshift 上运行查询的更简单方法。
首先,使用 发送查询execute_statement()
,然后使用 检索结果get_statement_result()
。
推荐阅读
- mysql - 计算每个用户选择的 COUNT 个项目,如何加快速度?
- sql - 如何选择具有两个不同条件 SQL Server 的同一列?
- javascript - React 如何在子组件中管理来自父组件的道具
- python - 为什么我声明的随机变量没有改变,即使我已经使用 randint 函数为其创建了一个对象
- python - UserPaymentInformation 匹配查询不存在
- swift - 如何处理 SKShapeNode 平铺地图上的 touchDown?
- php - 如何根据数组键拆分整数,然后根据我如何拆分该整数添加值
- flutter - 尝试从 dart mixin 调用类构造函数时,错误 T 不是函数
- progressive-web-apps - 通过 VPN 在 Android 上创建 WebAPK 失败
- javascript - 映射函数不传递列表中的最后一项