如何将 AWS RDS 的证书包 (PEM) 包含到 Flaskext.mysql 中?
How to include AWS RDS's Certificate bundle (PEM) into Flaskext.mysql?
我正在尝试建立从我的 Flask 应用程序到 Amazon Web Service 关系数据库服务的 SSL 连接 MYSQL。
我正在使用允许我连接到数据库的 Flask-MySQL 扩展。
这是我在数据库连接中的代码 'db.py':
from flaskext.mysql import MySQL
from flaskapp.__init__ import *
mysql = MySQL()
app.config['MYSQL_DATABASE_USER'] = os.getenv("MYSQL_DATABASE_USER")
app.config['MYSQL_DATABASE_PASSWORD'] = os.getenv("MYSQL_DATABASE_PASSWORD")
app.config['MYSQL_DATABASE_DB'] = os.getenv("MYSQL_DATABASE_DB")
app.config['MYSQL_DATABASE_HOST'] = os.getenv("MYSQL_DATABASE_HOST")
app.config['MYSQL_SSL_CA'] =
'mysql+pymysql://USERNAME:PASSWORD@<AWS RDS ENDPOINT>/<SCHEMA>?sslmode=verify-ca&sslrootcert=ap-southeast-1-bundle.pem'
mysql.init_app(app)
当我尝试进行查询时,出现错误显示:
File "C:\Users\nintu\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\app.py", line 2091, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\nintu\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\app.py", line 2076, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\nintu\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask_cors\extension.py", line 165, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "C:\Users\nintu\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\app.py", line 2073, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\nintu\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\app.py", line 1518, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\nintu\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask_cors\extension.py", line 165, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "C:\Users\nintu\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\app.py", line 1516, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\nintu\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\app.py", line 1502, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
File "C:\Users\nintu\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask_cors\decorator.py", line 128, in wrapped_function
resp = make_response(f(*args, **kwargs))
File "C:\Users\nintu\Desktop\FYP-21-S4-09\backend\flaskapp\routes.py", line 25, in zxc
conn = mysql.connect()
File "C:\Users\nintu\AppData\Local\Programs\Python\Python310\Lib\site-packages\flaskext\mysql.py", line 65, in connect
return pymysql.connect(**self.connect_args)
File "C:\Users\nintu\AppData\Local\Programs\Python\Python310\Lib\site-packages\pymysql\connections.py", line 285, in __init__
self.ctx = self._create_ssl_ctx(ssl)
File "C:\Users\nintu\AppData\Local\Programs\Python\Python310\Lib\site-packages\pymysql\connections.py", line 365, in _create_ssl_ctx
ca = sslp.get("ca")
AttributeError: 'str' object has no attribute 'get'
有人知道我哪里做错了吗?
大家好,我通过从 MySQL 扩展更改为 flask sqlalchemy
解决了这个问题
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@AWS-END-POINT/DataBaseSchema?ssl_ca=/your-aws-bundle.pem'
我正在尝试建立从我的 Flask 应用程序到 Amazon Web Service 关系数据库服务的 SSL 连接 MYSQL。 我正在使用允许我连接到数据库的 Flask-MySQL 扩展。
这是我在数据库连接中的代码 'db.py':
from flaskext.mysql import MySQL
from flaskapp.__init__ import *
mysql = MySQL()
app.config['MYSQL_DATABASE_USER'] = os.getenv("MYSQL_DATABASE_USER")
app.config['MYSQL_DATABASE_PASSWORD'] = os.getenv("MYSQL_DATABASE_PASSWORD")
app.config['MYSQL_DATABASE_DB'] = os.getenv("MYSQL_DATABASE_DB")
app.config['MYSQL_DATABASE_HOST'] = os.getenv("MYSQL_DATABASE_HOST")
app.config['MYSQL_SSL_CA'] =
'mysql+pymysql://USERNAME:PASSWORD@<AWS RDS ENDPOINT>/<SCHEMA>?sslmode=verify-ca&sslrootcert=ap-southeast-1-bundle.pem'
mysql.init_app(app)
当我尝试进行查询时,出现错误显示:
File "C:\Users\nintu\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\app.py", line 2091, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\nintu\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\app.py", line 2076, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\nintu\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask_cors\extension.py", line 165, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "C:\Users\nintu\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\app.py", line 2073, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\nintu\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\app.py", line 1518, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\nintu\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask_cors\extension.py", line 165, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "C:\Users\nintu\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\app.py", line 1516, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\nintu\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\app.py", line 1502, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
File "C:\Users\nintu\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask_cors\decorator.py", line 128, in wrapped_function
resp = make_response(f(*args, **kwargs))
File "C:\Users\nintu\Desktop\FYP-21-S4-09\backend\flaskapp\routes.py", line 25, in zxc
conn = mysql.connect()
File "C:\Users\nintu\AppData\Local\Programs\Python\Python310\Lib\site-packages\flaskext\mysql.py", line 65, in connect
return pymysql.connect(**self.connect_args)
File "C:\Users\nintu\AppData\Local\Programs\Python\Python310\Lib\site-packages\pymysql\connections.py", line 285, in __init__
self.ctx = self._create_ssl_ctx(ssl)
File "C:\Users\nintu\AppData\Local\Programs\Python\Python310\Lib\site-packages\pymysql\connections.py", line 365, in _create_ssl_ctx
ca = sslp.get("ca")
AttributeError: 'str' object has no attribute 'get'
有人知道我哪里做错了吗?
大家好,我通过从 MySQL 扩展更改为 flask sqlalchemy
解决了这个问题app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@AWS-END-POINT/DataBaseSchema?ssl_ca=/your-aws-bundle.pem'