実現したいこと
SQLAlchemyを利用してFlaskアプリのDBとしてRDS上のMySQLに接続したいです。
前提
SQLiteをDBとして利用してた際には、flask db migrateコマンドが実行できました。
MySQL Workbechやvscodeの拡張機能からは接続できました。
発生している問題・エラーメッセージ
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1045, "Access denied for user 'ユーザー名'@'自宅のIPアドレスのようなもの' (using password: YES)") (Background on this error at: https://sqlalche.me/e/20/e3q8)
該当のソースコード
#app.py
python
1from flask import Flask 2from flask_login import LoginManager 3from flask_migrate import Migrate 4from flask_sqlalchemy import SQLAlchemy 5from flask_wtf.csrf import CSRFProtect 6from apps.config import config 7 8db = SQLAlchemy() 9csrf = CSRFProtect() 10login_manager = LoginManager() 11login_manager.login_view = "auth.signup" 12login_manager.login_message = "" 13 14def create_app(config_key): 15 app = Flask(__name__) 16 app.config.from_object(config[config_key]) 17 18 csrf.init_app(app) 19 20 db.init_app(app) 21 Migrate(app, db) 22 login_manager.init_app(app) 23 24 from apps.crud import views as crud_views#この場所でのimportじゃないと上手くいかない 25 from apps.auth import views as auth_views#関数内でのimportじゃないと上手くいかない? 26 from apps.scrapy import views as sc_views 27 28 app.register_blueprint(crud_views.crud, url_prefix="/crud") 29 app.register_blueprint(auth_views.auth, url_prefix="/auth") 30 app.register_blueprint(sc_views.sc) 31 return app
#config.py
python
1from pathlib import Path 2import secrets 3 4basedir = Path(__file__).parent.parent 5 6class BaseConfig: 7 SECRET_KEY = secrets.token_urlsafe(32) 8 WTF_CSRF_SECRET_KEY = secrets.token_urlsafe(40) 9 10 11class LocalConfig(BaseConfig): 12 SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://ユーザー名:パスワード@エンドポイント:3306/DB名' 13 SQLALCHEMY_TRACK_MODIFICATIONS = False 14 SQLALCHEMY_ECHO=True 15 16 17class TestingConfig(BaseConfig): 18 SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://ユーザー名:パスワード@エンドポイント:3306/DB名' 19 SQLALCHEMY_TRACK_MODIFICATIONS = False 20 WTF_CSRF_ENABLED = False 21 22config = { 23 "testing": TestingConfig, 24 "local": LocalConfig 25} 26
試したこと
下記コードを実行することでMySQL上にDBを作製することができました。
python
1#create_db.py 2import mysql.connector 3 4mydb = mysql.connector.connect( 5 host = RDSのエンドポイント, 6 user = ユーザー名, 7 password = パスワード, 8) 9 10my_cursor = mydb.cursor() 11 12my_cursor.execute("CREATE DATABASE flask_db") 13 14my_cursor.execute("SHOW DATABASES") 15for db in my_cursor: 16 print(db)
また、エラー文に記載されていたサイトの記述を読んでみた結果、SQLAlchemyのDBAPIがエラーの原因ぽいです。
https://sqlalche.me/e/20/e3q8
補足情報(FW/ツールのバージョンなど)
よろしくお願いいたします。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/10/23 10:59
2023/10/30 00:42