Python 2.7 通过Chalice连接不同路线的AWS RDS?
一个典型的chalice应用程序定义了几个路由,但如何将其正确连接到RDS,以便保存POST数据或从db检索数据?我已经通过RDS面板创建了一个数据库;我只是不知道如何从圣杯进入它 是否只是让每条路由通过用户/通行证连接到给定的RDS主机 比如说,Python 2.7 通过Chalice连接不同路线的AWS RDS?,python-2.7,amazon-web-services,aws-lambda,chalice,Python 2.7,Amazon Web Services,Aws Lambda,Chalice,一个典型的chalice应用程序定义了几个路由,但如何将其正确连接到RDS,以便保存POST数据或从db检索数据?我已经通过RDS面板创建了一个数据库;我只是不知道如何从圣杯进入它 是否只是让每条路由通过用户/通行证连接到给定的RDS主机 比如说, from chalice import Chalice import psycopg2 app = Chalice(app_name='test') db_user = 'test' db_pass = 'password' db_host = '
from chalice import Chalice
import psycopg2
app = Chalice(app_name='test')
db_user = 'test'
db_pass = 'password'
db_host = 'https://.....'
db_port = 5432
@app.route('/save_data')
def save_data():
with psycopg2.connect(user=db_user, password=db_pass, ...) as conn:
with conn.cursor() as cur:
cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", (1,2))
@app.route('/get_data')
def get_data():
with psycopg2.connect(user=db_user, password=db_pass, ...) as conn:
with conn.cursor() as cur:
cur.execute("SELECT * FROM test")
@app.route('/something')
def something():
with psycopg2.connect(user=db_user, password=db_pass, ...) as conn:
with conn.cursor() as cur:
cur.execute(....) # some other query
如果是这样的话,有没有更简单的方法来处理这个问题,而不是每次都指定db连接?这样做是否存在奇怪的会话/比赛条件
或者,如果我完全关闭,从Chalice routes连接到RDS的正确方式是什么?我在Chalice应用程序中实际设置了此选项。我所做的是设置参数存储,将不同的数据库连接存储在那里,并将它们调用到Chalice中 我制作了一个名为Parameters.py的文件,并将其放入其中:
import boto3
def getParameter(param_name):
# Create the SSM Client
ssm = boto3.client('ssm', region_name='us-east-1')
# Get the requested parameter
response = ssm.get_parameters(
Names=[
param_name,
],
WithDecryption=True
)
# Store the credentials in a variable
credentials = response['Parameters'][0]['Value']
return credentials
然后我可以这样称呼它:
def dbInsert(query, stage):
stageParm = stage + "_database"
parm = Parameters.getParameter(stageParm)
pJson = json.loads(parm)
repli = pJson["replication"]
dbName = pJson["database"]
writeEndPoint = repli["write"]["host"]
writeUsername = repli["write"]["username"]
writePassword = repli["write"]["password"]
try:
conn = pymysql.connect(
writeEndPoint,
user=writeUsername,
passwd=writePassword,
db=dbName,
connect_timeout=5)
except Exception as ex:
return ex
cur = conn.cursor()
cur.execute(query)
results = cur.fetchall()
cur.close()
conn.close()
return results
results = cur.fetchall()
cur.close()
conn.close()
return results
希望能有所帮助。您需要为Python找到一个您喜欢的ORM。我相信Chalice只是一个控制器层。这看起来是一篇值得回顾的可靠文章@乔治·惠特克,我不太明白。ORM仍然会使用psycopg2或其他postgres连接器库来连接引擎盖下的db。我试图连接到db,而不是试图找到一种方法来抽象我的db表。ORM通常有一个抽象层来处理连接管理。示例:。这是你问题的根源。您可以尝试自己编写,但通过使用ORMWill API调用之间的连接持久化,您可能会节省大量时间?这不是调用之间的持久化,但实际上您可以在API网关中设置缓存来解决此问题。由于项目的需要,我不需要持久性。这是一篇很好的文章,可以解释这种结构如何适用于lambdas这样的微服务: