使用 Flask-SQLAlchemy 连接到 AWS RDS MySQL 数据库实例
Posted
技术标签:
【中文标题】使用 Flask-SQLAlchemy 连接到 AWS RDS MySQL 数据库实例【英文标题】:Connect to AWS RDS MySQL database instance with Flask-SQLAlchemy 【发布时间】:2013-01-28 19:25:47 【问题描述】:对于我的 Flask 应用程序,我想使用 Flask-SQLAlchemy 扩展连接到我在 AWS RDS 上创建的数据库实例。
当我尝试连接时,应用程序超时并出现以下错误:
sqlalchemy.exc.OperationalError: (OperationalError) (2003, "Can't 连接到 mysql 服务器 'xxxxxxxxxxxxxxx.xxxxxxxxxxxx.us-east-1.rds.amazonaws.com'(60")
我的代码如下所示:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
application = Flask(__name__)
application.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://master username:db password@endpoint/db instance name'
db = SQLAlchemy(application)
@application.route('/')
def hello_world():
return 'Hello World'
if __name__ == '__main__':
application.run()
Flask-SQLAlchemy documentation 表示 mysql 数据库连接的 SQLALCHEMY_DATABASE_URI 的格式应如下所示:
mysql://username:password@server/db
此外,我可以查看 AWS RDS 控制台以获取有关我的数据库实例的信息。控制台看起来像this。
现在我假设 SQLAlchemy 中的“用户名”是指 AWS RDS 控制台中的“主用户名”, SQLAlchemy 中的“服务器”是指 AWS RDS 控制台中的“端点”, 而“db”指的是“数据库实例名称”
我做错了什么??
如果有人可以用 AWS RDS 控制台术语为我描述 SQLALCHEMY_DATABASE_URI,那将完全解决问题。
【问题讨论】:
如何将其用于 aws 旋转密钥,如果密钥更新,我们是否需要重新启动应用程序? 【参考方案1】:转到您的 AWS RDS 控制台并选择您的实例 -> 数据库安全组 -> 单击默认
并根据推荐的 IP 范围添加新的 CIDR。
这基本上是一个防火墙配置,它决定谁可以连接到数据库实例。
您可以将其设置为 0.0.0.0/0,这样防火墙就不会阻止您从任何主机/网络访问它。
【讨论】:
这个答案现在不是很有效,因为AWS中的接口已经改变:(【参考方案2】:这是一个有效路径:EC2 仪表板 -> 从左侧面板查找网络和安全 -> 安全组。
如果您创建了安全组,则可以转到第 2 项。
-
创建新的安全组:
您可以在此处命名您的安全组和描述。
VPC 可能会自动为您创建。
创建后,从列表中选择它。
-
设置入站和/或出站连接:
这里可以配置入站连接规则。
在编辑时 -> 添加规则,您有默认预设以便于配置,例如端口 80 上的 HTTP。
希望从现在开始对大家有所帮助。
出于安全原因,请尝试仅允许需要的可信 IP 和/或安全组。【讨论】:
【参考方案3】:确保您在附加配置下的数据库初始设置中创建数据库名称,除非 AWS RDS 不会创建数据库。
【讨论】:
否则,使用DBeaver之类的数据库管理工具连接RDS实例并在那里创建数据库。【参考方案4】:由于AWS
界面发生了很大变化,所以用更新的界面重新发布答案。
-
转到您的
database instances
,点击您的DB identifier
获取您的数据库。
在那里你会看到Connectivity & security
,点击Security
下的VPC security groups
。在那里您会看到一个安全组列表。
现在点击Inbound Rules
,然后在右边你会看到Edit Inbound Rules
,点击它。
您的Inbound Rules
应该如下图所示。
添加这些规则后,只需将它们保存并尝试连接,它应该可以工作。
【讨论】:
以上是关于使用 Flask-SQLAlchemy 连接到 AWS RDS MySQL 数据库实例的主要内容,如果未能解决你的问题,请参考以下文章
AttributeError:使用flask-sqlalchemy连接到sqlite数据库时无法设置属性
如何在一段时间后更改Flask-SQLAlchemy URI?
Flask-SQLAlchemy 和 Gevent 没有关闭 mysql 连接