Flask-SQLAlchemy连接多个数据库(__bind_key__)---ORM(5)

文章目录

      • 0.知识背景
      • 1.数据库模型类里面添加参数:
      • 2.初始化app的时候,需要绑定数据库的信息

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')

你可能感兴趣的:(Python高级)