flask_sqlalchemyを使って複数のデータベースに接続する場合の書き方です。
参考:Youtube動画 How to Use Multiple Databases With Flask-SQLAlchemy
以下はmysqlを3つ接続する場合です。
#ディレクトリ構成
├── startup.py #起動ファイル
├── application
│ ├── __init__.py #アプリケーション本体ファイル
│ ├── models.py
│ └── views.py
├── instance
│ └── config.py
#コンフィグの書き方
1つ目のデータベースをSQLALCHEMY_DATABASE_URIへ記載しています。
残りの2つのデータベースをSQLALCHEMY_BINDSに辞書型で指定しています。
config.py
DB_USER = 'test_user0'
DB_PASS = 'password0'
DB_HOST = 'xxx.xxx.xxx.101'
DB_NAME = 'db1'
db_uri = "mysql+pymysql://{0}:{1}@{2}/{3}?charset=utf8".format(DB_USER, DB_PASS, DB_HOST, DB_NAME)
DB_USER1 = 'test_user1'
DB_PASS1 = 'password1'
DB_HOST1 = 'xxx.xxx.xxx.201'
DB_NAME1 = 'db234'
db_uri_another1 = "mysql+pymysql://{0}:{1}@{2}/{3}?charset=utf8".format(DB_USER1, DB_PASS1, DB_HOST1, DB_NAME1)
DB_USER2 = 'test_user2'
DB_PASS2 = 'password2'
DB_HOST2 = 'xxx.xxx.abb.202'
DB_NAME2 = 'db456'
db_uri_another2 = "mysql+pymysql://{0}:{1}@{2}/{3}?charset=utf8".format(DB_USER2, DB_PASS2, DB_HOST2, DB_NAME2)
SQLALCHEMY_DATABASE_URI = db_uri
SQLALCHEMY_BINDS = {"adding_db1": db_uri_another1, "adding_db2":db_uri_another2}
#モデルの書き方
adding_db1のテーブル(table1)を利用したい場合は
SQLALCHEMY_BINDSで指定したbind_keyをtablenameの前に書きます。
models.py
from application import db
class sample01(db.Model):
__bind_key__ = 'adding_db1'
__tablename__ = 'table1'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(30))
memo = db.Column(db.String(150))
※bind_keyを書かなかった場合はSQLALCHEMY_DATABASE_URIに接続するようです。
(参考)
startup.py
from application import app
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000)
___init__.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__, instance_relative_config=True) #コンフィグはinstanceフォルダを見るように指定
app.config.from_pyfile('config.py', silent=False) #config.pyが見つからない場合はエラー
db = SQLAlchemy(app)
import application.views
import application.models