LoginSignup
9
6

More than 3 years have passed since last update.

flask_sqlalchemyで複数のデータベースに接続したい

Last updated at Posted at 2019-10-24

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
9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6