Flask-SQLAlchemy連接多個數據庫(__bind_key__)---ORM(5)

0.知識背景

  • 如下主要說明的是,連接某一個地址的數據庫裏面的不同庫的方式
  • Flask-SQLAlchemy在設置SQLALCHEMY_DATABASE_URI的參數的時候,設置的數據庫是默認的數據庫,但是偶爾需要連接其他數據庫的時候,無法訪問到裏面的表格,如何操作呢?

1.數據庫模型類裏面添加參數:


class Course(db.Model):
    __tablename__ = "course"                     # 因爲course表格是默認數據庫裏面的表格,不需要指名數據庫也可以
    courseID = db.Column(db.Integer, primary_key=True)
    courseName = db.Column(db.String(64), unique=True)


class Columns(db.Model):
    __bind_key__ = 'information_schema'       # 指名連接的數據庫是哪個
    __tablename__ = "COLUMNS"
    TABLE_CATALOG = db.column(db.Text)
    TABLE_SCHEMA = db.column(db.Text)
    TABLE_NAME = db.column(db.Text)
    COLUMN_NAME = db.column(db.Text)
    ORDINAL_POSITION = db.column(db.INT)

2.初始化app的時候,需要綁定數據庫的信息

# APP模塊下的__init__.py文件

from flask import Flask
from configure import *
from flask_sqlalchemy import SQLAlchemy


app = Flask(__name__, template_folder='../templates', static_folder='../static')


DB_URI = "mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8mb4".format(username=USERNAME,
                                                                                           password=PASSWORD,
                                                                                           host=HOSTNAME, port=PORT,
                                                                                           db=DATABASE)
DB_URI_binds = "mysql+pymysql://{username}:{password}@{host}:{port}/".format(username=USERNAME,
                                                                            password=PASSWORD,
                                                                            host=HOSTNAME, port=PORT)

# 設置需要連接的其他數據庫的具體信息
SQLAlchemy_binds_local = {
    "test": DB_URI_binds + "test",
    "information_schema": DB_URI_binds + "information_schema",
    "world": DB_URI_binds + "world",
}


app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
app.config['SQLALCHEMY_BINDS'] = SQLAlchemy_binds_local
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

db = SQLAlchemy(app)

# 創建表格模型,方便sqlalchemy調用不同庫的表格
db.create_all()
db.create_all(bind='information_schema')
db.create_all(bind='world')

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章