我目前正在使用awslambda(python3.6)与MySQL数据库进行通信。我还有Slack命令来触发对数据库的查询。有时,我注意到,我可以直接通过MySQL Workbench进行更改,然后通过Slack触发一个查询,Slack返回旧值。我目前在python处理程序之外连接到MySQL,如下所示:BOT_TOKEN = os.environ["BOT_TOKEN"]
ASSET_TABLE = os.environ["ASSET_TABLE"]
REGION_NAME = os.getenv('REGION_NAME', 'us-east-2')
DB_NAME = os.environ["DB_NAME"]
DB_PASSWORD = os.environ["DB_PASSWORD"]
DB_DATABASE = os.environ["DB_DATABASE"]
RDS_HOST = os.environ["RDS_HOST"]
port = os.environ["port"]
try:
conn = pymysql.connect(RDS_HOST, user=DB_NAME, passwd=DB_PASSWORD, db=DB_DATABASE, connect_timeout=5, cursorclass=pymysql.cursors.DictCursor)
cursor = conn.cursor()
except:
sys.exit()
MySQL连接是在我程序最上面的任何定义之外完成的。Slack发送命令时,我调用另一个定义,然后查询MySQL。这有时工作正常,但其他时候可以发送我的旧数据,没有更新。整个布局是这样的:
进口
SQL连接
SQL查询定义
处理程序定义
我尝试将MySQL连接部分移到处理程序内部,但是SQL查询定义无法识别我的游标(我猜超出了范围)。在
所以我的问题是,如何处理这个MySQL连接?最好将MySQL连接放在任何定义之外吗?每次都要打开和关闭连接吗?为什么我的数据过时了?Lambda会一直运行整个例程还是会尝试在服务器之间分配负载(我发誓我读到了一些我不能依赖Lambda来始终读取我的整个例程的地方;有时它只读取处理程序)?在
我对这一切都很陌生,所以任何建议都非常感谢。谢谢!在
其余代码如果有帮助:
^{pr2}$