文档章节

用Binds操作多个数据库

指尖跳动的精灵
 指尖跳动的精灵
发布于 2015/01/28 23:31
字数 436
阅读 161
收藏 0

引入binds的目的是让Flask-SQLAlchemy支持多个数据库。

什么是binds

在SQLAlchemy中,一个binds是可以执行SQL语句,且通常是一个连接或引擎的东西。在Flask-SQLAlchemy中,bind总是背后自动为你创建好引擎。每一个引擎中都会关联一个键(bind key)。这个键会在模型声明时使用来把一个模型关联到一个特定引擎。

如果没有为模型指定bind key,会默认连接(即SQLALCHEMY_DATABASE_URI配置的值)

示例配置:

下面的配置声明了三个数据库连接:默认连接(SQLALCHEMY_DATABASE_URI)和另外两个分别名为users和appmeta。

SQLALCHEMY_DATABASE_URI='postgres://localhost/main'

SQLALCHEMY_BINDS={

        'users':'mysqldb://localhost/users',

        'appmeta':'sqlite:////path/to/appmeta.db'

}

创建表和删除表:

create_all()和drop_all()方法的原型为:

create_all(bind='__all__',app=None)

drop_all(bind='__all__',app=None)

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

>>>bd.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'})

如果你在模型上指定了__bind_key__,你可以用它们准确地做你想要的。模型会自行连 接到指定的数据库连接。

本文转载自:http://docs.jinkan.org/docs/flask-sqlalchemy/binds.html#binds

共有 人打赏支持
指尖跳动的精灵
粉丝 16
博文 90
码字总数 48459
作品 0
海淀
私信 提问
Bulk Binds (BULK COLLECT & FORALL) and Record Proc

Bulk Binds (BULK COLLECT & FORALL) and Record Proc 码蜂笔记2017-09-029 阅读 数据库oracle 引言 Oracle 使用两种引擎来处理 PL/SQL 代码。所有存储过程的代码由 PL/SQL 引擎处理,所有的...

码蜂笔记
2017/09/02
0
0
Oracle中打开10046 Trace的各种方法

Oracle中打开10046 Trace的各种方法 原创 Linux操作系统 作者:rongshiyuan 时间:2012-12-23 15:47:41 6970 0 Oracle中打开10046 Trace的各种方法 10046 trace的跟踪等级 10046是一个Oracl...

rootliu
2018/12/06
0
0
LinOTP 2.6.0.1 发布,一次性密码解决方案

LinOTP 2.6.0.1 发布,此版本更新内容如下: 添加了 radius 客户端测试工具 "linotp-auth-radius" (支持 challenge response); fixes the otppin=2 (no pin) problems with email and totp......

oschina
2014/02/14
385
0
JDocker 0.1.3 发布支持 Docker API 1.25

JDocker 基于 Docker1.12+ (Docker API 1.24+) 封装的开发Docker包,通过封装 Docker API 使开发者可以快速的使用 Java 开发出控制和操作 Docker 的应用,使用流式操作,简单明了。 完善的测试...

愚民日记
2017/01/24
2.5K
1
解决非root用户使用docker的办法

通常我们使用Docker的时候都是使用的root,官方说法如下: The docker daemon binds to a Unix socket instead of a TCP port. By default that Unix socket is owned by the user root and ......

John
01/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux 静态IP、DNS、主机名配置

linux 静态IP、DNS、主机名配置 一、IP配置 进入网络配置文件目录 cd  /etc/sysconfig/network-scripts/ 列出当前目录下文件名 ll 编辑配置文件 注意:ifcfg-eth0是我电脑的一个网卡标识...

小儿
21分钟前
4
0
配置vagrant使用三种网络

使用vagrant安装之后一直使用127.0.0.1进行访问。但是一直使用这个ip肯定满足不了的。我们装肯定是有需求的,那么本节就讲解一下用vagrant的网络配置。 vagrant中一共提供了三种网络配置。 ...

echojson
22分钟前
0
0
重磅发布:阿里开源 OpenJDK 长期支持版本 Alibaba Dragonwell

3 月 21 日北京阿里云峰会,阿里巴巴正式宣布对外开源 OpenJDK 长期支持版本 Alibaba Dragonwell。作为 Java 全球管理组织 Java Community Process (JCP) 的最高执行委员会的唯一中国代表,以...

阿里云官方博客
23分钟前
1
0
重磅发布:阿里开源 OpenJDK 长期支持版本 Alibaba Dragonwell

3 月 21 日北京阿里云峰会,阿里巴巴正式宣布对外开源 OpenJDK 长期支持版本 Alibaba Dragonwell。作为 Java 全球管理组织 Java Community Process (JCP) 的最高执行委员会的唯一中国代表,以...

阿里云云栖社区
29分钟前
0
0
OAuth2实现单点登录SSO

1. 前言 技术这东西吧,看别人写的好像很简单似的,到自己去写的时候就各种问题,“一看就会,一做就错”。网上关于实现SSO的文章一大堆,但是当你真的照着写的时候就会发现根本不是那么回事...

java菜分享
29分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部