flask sqlalchemy 绑定多个数据库
create_all() 和 drop_all() 方法默认作用于所有声明的绑定(bind),包括默认的。这个行为可以通过提供 bind 参数来定制。它可以是单个绑定(bind)名, ‘’ 指向所有绑定(binds)或一个绑定(bind)名的列表。bind key 存储在表中的 info 字典中作为 ‘bind_key’ 键值。下面的配置声明了三个数据库连接。特殊的默认值和另外两个分别名为 use
·
下面的配置声明了三个数据库连接。特殊的默认值和另外两个分别名为 users(用于用户)和
appmeta 连接到一个提供只读访问应用内部数据的 sqlite 数据库):
SQLALCHEMY_DATABASE_URI = 'postgres://localhost/main'
SQLALCHEMY_BINDS = {
'users': 'mysqldb://localhost/users',
'appmeta': 'sqlite:path/to/appmeta.db'
}
创建和删除表
create_all() 和 drop_all() 方法默认作用于所有声明的绑定(bind),包括默认的。这个行为可以通过提供 bind 参数来定制。它可以是单个绑定(bind)名, ‘all’ 指向所有绑定(binds)或一个绑定(bind)名的列表。默认的绑定(bind)(SQLALCHEMY_DATABASE_URI) 名为 None:
>>> db.create_all()
>>> db.create_all(bind=['users'])
>>> db.create_all(bind='appmeta')
>>> db.drop_all(bind=None)
引用绑定(Binds)
当您声明模型时,您可以用 bind_key 属性指定绑定(bind):
class User(db.Model):
__bind_key__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
bind key 存储在表中的 info 字典中作为 ‘bind_key’ 键值。了解这个很重要,因为当您想要直接创建一个表对象时,您会需要把它放在那:
user_favorites = db.Table('user_favorites',
db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
db.Column('message_id', db.Integer, db.ForeignKey('message.id')),
info={'bind_key': 'users'}
)
参考
http://www.pythondoc.com/flask-sqlalchemy/binds.html
# main.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from config import SQLALCHEMY_DATABASE_URI, SQLALCHEMY_BINDS
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = DefaultConfig.SQLALCHEMY_DATABASE_URI
app.config['SQLALCHEMY_BINDS'] = DefaultConfig.SQLALCHEMY_BINDS
db = SQLAlchemy(app)
class Teacher(db.Model):
# 使用默认数据库,不需要像下面指定__bind_key__
__tablename__ = 'tablename1' # 表名
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(16))
cardNumber = db.Column(db.String(30))
class Students(db.Model):
__bind_key__ = 'students' # 已设置__bind_key__ 数据库名
__tablename__ = 'tablename2' # 表名
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(16))
cardNumber = db.Column(db.String(30))
更多推荐
已为社区贡献2条内容
所有评论(0)