Flask-SQLAlchemy 中使用显式主主数据库设置

在这里插入图片描述

1、问题背景

在一个 Flask-SQLAlchemy 项目中,用户想要使用显式主主数据库设置。具体而言,他想要能够从默认数据库中读取数据,并将数据持久化到两个主数据库中。他希望知道是否可以使用 Flask-SQLAlchemy 和 binds 来实现这一目标。

2、解决方案

为了实现显式主主数据库设置,可以按照以下步骤进行操作:

  1. 定义 SQLAlchemy 应用程序配置
app = Flask(__name__)# 定义默认数据库 URI
SQLALCHEMY_DATABASE_URI = 'default_DB_uri'# 定义主数据库 URI
SQLALCHEMY_BINDS = { 'master1':'first_master_DB_uri', 'master2': 'second_master_DB_uri' }# 将 SQLAlchemy 配置应用到 Flask 应用中
app.config['SQLALCHEMY_DATABASE_URI'] = SQLALCHEMY_DATABASE_URI
app.config['SQLALCHEMY_BINDS'] = SQLALCHEMY_BINDS# 创建 SQLAlchemy 对象
db = SQLAlchemy(app)
  1. 自定义 Flask-SQLAlchemy 会话类
from flask_sqlalchemy import SQLAlchemy, SignallingSession, get_state
from flask_sqlalchemy._compat import itervaluesclass UsingBindSignallingSession(SignallingSession):def get_bind(self, mapper=None, clause=None):if self._name:_eng = get_state(self.app).db.get_engine(self.app,bind=self._name)return _engelse:return super(UsingBindSignallingSession, self).get_bind(mapper, clause)_name = Nonedef using_bind(self, name):self._name = namereturn selfclass UsingBindSQLAlchemy(SQLAlchemy):def create_session(self, options):return UsingBindSignallingSession(self, **options)def get_binds(self, app=None):retval = super(UsingBindSQLAlchemy, self).get_binds(app)# get the binds for None again in order to make sure that it is the default bind for tables# without an explicit bindbind = Noneengine = self.get_engine(app, bind)tables = self.get_tables_for_bind(bind)retval.update(dict((table, engine) for table in tables))return retvaldef get_tables_for_bind(self, bind=None):"""Returns a list of all tables relevant for a bind.Tables without an explicit __bind_key__ will be bound to all binds."""result = []for table in itervalues(self.Model.metadata.tables):# if we don't have an explicit __bind_key__ bind this table to all databasesif table.info.get('bind_key') == bind or table.info.get('bind_key') == None:result.append(table)return resultdb = UsingBindSQLAlchemy()
  1. 使用自定义的 Flask-SQLAlchemy 会话类
# 创建一个默认数据库会话
session = db.session# 创建一个主数据库会话
master_session1 = db.session().using_bind('master1')# 创建另一个主数据库会话
master_session2 = db.session().using_bind('master2')# 在默认数据库中读取数据
read_data = session.query('select ...').all()# 在第一个主数据库中持久化数据
master_session1.add(SOME_OBJECT)
master_session1.commit()# 在第二个主数据库中持久化数据
master_session2.add(SOME_OBJECT_CLONE)
master_session2.commit()

通过上述步骤,就可以实现显式主主数据库设置,并在 Flask-SQLAlchemy 中使用它。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/640615.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

three.js(3):添加three. js坐标轴、光源和阴影效果

1 实现步骤 要实现阴影效果同样需要几个重要的概念。 我们首先研究一下日常生活中是如何产生阴影效果的。 需要有光。需要一个物体,比如苹果、狗等。需要一个接受投影的元素,比如地面、桌面等。 在 Three.js 中要产生阴影效果其实和现实世界的原理差…

Azure AD统一认证及用户数据同步开发指导

本文主要目的为:指导开发者进行自有服务与Azure AD统一认证的集成,以及阐述云端用户数据同步的实现方案。本文除了会介绍必要的概念、原理、流程外,还会包含Azure门户设置说明,以及使用Fiddler进行全流程的实操验证,同…

苹果电脑装虚拟机好用吗 苹果电脑装虚拟机要钱吗 Parallels对mac的损害 Parallels占用多大空间 PD19

在当今数字化的时代,人们对电脑系统跨设备互联的需求越来越高。作为拥有广泛用户群体的苹果电脑,许多用户会有在Mac系统中运行其他操作系统的需求。在这种情况下,安装虚拟机是一个较好的解决方案。那么接下来就给大家介绍苹果电脑装虚拟机好用…

ChatGPT助力测试领域!探索人工智能编写测试用例的新前景

简介 测试用例是测试人员的核心工作内容,是测试人员思想的“实现类”,其充分体现了测试的思路,可以为后续的测试行为提供指导,是测试人员了解业务的重要根据和质量之根本。如果测试用例设计得不完成,出现了遗漏&#x…

什么是NTFS文件系统 Paragon NTFS与Tuxera NTFS有何区别 paragon ntfs 优惠券

NTFS 英文全称New Technology File System,中文名叫新技术文件系统,是 WindowsNT 环境的文件系统。NTFS是Windows NT家族(如Windows 2000、Windows XP、Windows Vista、Windows 7和 windows 8.1等)的限制级专用的文件系统(操作系统所在的盘的…

windows ubuntu 子系统:肿瘤全外篇,bam质控

各个环节的质控, raw和clean都要质控, 比对的各环节的bam文件都要质控, 使用qulima对wes的比对bam文件总结测序深度及覆盖率。 samtools flagstat L1_recalibrated_reads.bam 该命令将输出 BAM 文件的一些统计信息,包括总读取数、…

stm32HAL_GPIO输入

学会使用 GPIO 采集 KEY 的数据信息,这种信息采集技术在生活中常见于对大自 然环境的各种信息的采集。比如环境温度,湿度等等。我们这里以 key 为入门设 备。 一,什么是信息采集 比如环境温度,湿度等等。我们需要把这些温度&am…

Linux thermal框架介绍

RK3568温控 cat /sys/class/thermal/thermal_zone0/temp cat /sys/class/thermal/thermal_zone1/temp cat /sys/class/thermal/cooling_device0/cur_state cat /sys/class/thermal/cooling_device1/cur_state cat /sys/class/thermal/cooling_device2/cur_state thermal_zone…

Cloud微服务:Ribbon负载均衡

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ Ribbon负载均衡 一、Ribbon - 负载均衡原理、流…

Oracle进阶(2)——物化视图案例延伸以及序列、同义词

一、物化视图 物化视图(Materialized View)是 Oracle 数据库中的一个对象,它是一个预先计算和存储的查询结果集,类似于视图,但与视图不同的是,物化视图会将查询结果保存在物理存储中,而不是动态…

WPF2022终结版系列课程笔记 1 WPF 基本布局

本笔记为B站 微软系列技术教程 WPF项目实战合集(2022终结版) 项目记录 WPF 基本布局 WPF布局原则 一个窗口中只能包含一个元素 不应显示设置元素尺寸 不应使用坐标设置元素的位置 可以嵌套布局容器 WPF布局容器 StackPanel: 水平或垂直排列元素、Orientation属性分别: Hor…

STP学习的第一篇

1.STP的基本概念:根桥 (1)STP的主要作用之一是在整个交换网络中计算出一棵无环的“树”(STP树)。 (2)根桥是一个STP交换网络中的“树根”。 (3)STP开始工作后&#xf…