質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Amazon RDS

Amazon RDSは、米アマゾン社が提供しているRDBMSサービス。クラウド上でのリレーショナルデータベースの構築および運用が可能です。MySQL/PostgreSQL/Oracle/SQL Serverのインストールを容易にすることができます。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

Q&A

1回答

832閲覧

FlaskからRDSのMySQLに接続して、migrationしたいです

ko-ske

総合スコア1

Amazon RDS

Amazon RDSは、米アマゾン社が提供しているRDBMSサービス。クラウド上でのリレーショナルデータベースの構築および運用が可能です。MySQL/PostgreSQL/Oracle/SQL Serverのインストールを容易にすることができます。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

0グッド

0クリップ

投稿2023/10/21 14:54

編集2023/10/21 14:56

実現したいこと

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/ツールのバージョンなど)

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

エラーメッセージだけを見ると、認証エラーですが、認証エラー以外の時にも似たようなものが出た気がするので、以下を確認すると良いと思います。

  1. ユーザID/PASSWORDはあっているか?
  2. ユーザIDは、対象のDBを操作する権限を持っているか?
  3. localhostで接続していない場合、外部からの接続を許可しているか?
  4. rootでアクセスしていないか?
    mysqlかmariadbか忘れましたが、セキュリティの関係でrootだと上手くアクセスできなかったような?

投稿2023/10/23 01:28

FiroProchainezo

総合スコア2443

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ko-ske

2023/10/23 10:59

ご回答ありがとうございます。 現時点で、確認できたことを以下に記載いたします。 1.ユーザID/PASSWORDはあっているか?  →RDS上でMySQL作成時のものを利用しております。また、MySQL Workbench経由では接続できるため   問題ないと考えております。 2.ユーザIDは、対象のDBを操作する権限を持っているか?  →EC2経由でMySQLに接続し、(show grants for 'ユーザー名'@'ホスト名')というコマンドで確認した結果、  全権限を持っていると思われる結果が得られました。 3.localhostで接続していない場合、外部からの接続を許可しているか?  →作業場所にあわせて、MySQLに対するインバウンドルール変更しているので、大丈夫だと考えております。 4.rootでアクセスしていないか?  →RDSのMySQL作製時に登録したマスターユーザー名を使用しているため大丈夫だと考えております。 上記の確認事項を含め、勘違いや見落としがあると思うのでおかしな点があればご指摘ください。 お時間を割いていただきありがとうございます。
FiroProchainezo

2023/10/30 00:42

RDSという単語を見落としてました・・・ 以下に「SQLAlchemy+MySQL+AmazonRDSでDBを作ってみた」という記事があったので、上から確認してみてはいかがでしょうか? https://zenn.dev/megane_otoko/articles/061_make_db_mysql_sqlalchemy Flask-SQLAlchemyはSQLAlchemyのラッパーなので、若干読み替えが必要と思いますが、接続部分は参考になると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問