LoginSignup
1
5

More than 3 years have passed since last update.

SQLAlchemyで複数のデータベースに接続

Posted at

DB情報の設定

config.py
class SystemConfig:

    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://{user}:{password}@{host}/{db_name}?charset=utf8'.format(**{
        'user': 'sample_user',
        'password': 'passwd',
        'host': 'host',
        'db_name': 'sample_db_1'
    })

    SQLALCHEMY_BINDS = {"second_sample_db": SECOND_SAMPLE_DATABASE}

    SECOND_SAMPLE_DATABASE = 'mysql+pymysql://{user}:{password}@{host}/{db_name}?charset=utf8'.format(**{
        'user': 'sample_user',
        'password': 'passwd',
        'host': 'host',
        'db_name': 'sample_db_2'
    })

Config = SystemConfig

起動時のファイル設定

database.py
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

def init_db(app):
  db.init_app(app)
__init__.py
import config

from flask import Flask
from api.database import db


def create_app():

    app = Flask(__name__)

    # config.pyを読み込む
    app.config.from_object('config.Config')
    db.init_app(app)

    return app

app = create_app()
app.py
from api import app

if __name__ == '__main__':
  app.run()

DBのモデル

model.py
from database import db

class SecondSample(db.Model):
    __bind_key__ = 'second_sample_db' #config.pyで設定したもの
    __tablename__ = 'second_sample_table'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)
    date = db.Column(db.DATETIME)

    def __init__(self, id, name, date):
        self.id = id
        self.name = name
        self.date = date

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

1
5
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
1
5