ORM框架Peewee六(连接池、主从、重连、ssh连接)
一、peewee连接池
from peewee import *from playhouse.pool import PooledMySQLDatabase, PooledDatabasePooledMySQLDatabase('peewee_test',max_connections=8,stale_timeout=300,user='user', password='password',host='127.0.0.0',port=3306)
二、Peewee主从式 ,读写分离
- 方法一 该方案仅支持mysql
pip install pwmd
from datetime import date from peewee import Model, CharField, DateField, BooleanField from pwmd import MultiMySQLDatabaseDATABASE = {'master': 'mysql://root@localhost/test_app','slaves': ['mysql://root@localhost/test_app']} db = MultiMySQLDatabase(DATABASE) db.connect()class BaseModel(Model):class Meta:database = db class Person(BaseModel):name = CharField()birthday = DateField()is_relative = BooleanField()1. 可以利用普通的方法 2. 强制使用特殊数据库: with db.using('master'):pass
- 方法二 主从分离 peewee 2版本 3已经移除除(3的目前我没找到 2022年03月14日)
# 声明一个主副本和两个读取副本。
from playhouse.read_slave import ReadSlaveModel
master = PostgresqlDatabase('master')
replica_1 = PostgresqlDatabase('replica_1')
replica_2 = PostgresqlDatabase('replica_2')# 声明一个基本模型
class BaseModel(ReadSlaveModel):class Meta:database = masterread_slaves = (replica_1, replica_2)# 申报你的模型。
class User(BaseModel):username = CharField()
三、 peewee 数据库重连,连接池连接不够
# _*_ coding:utf-8 _*_
from playhouse.pool import PooledMySQLDatabase
from playhouse.shortcuts import ReconnectMixin
import configclass RetryMySQLDatabase(ReconnectMixin, PooledMySQLDatabase):_instance = None@staticmethoddef get_db_instance():if not RetryMySQLDatabase._instance:RetryMySQLDatabase._instance = RetryMySQLDatabase(config.get('db_name', 'aaabb'),max_connections=8,stale_timeout=300,host=config.get('db_host', '127.0.0.1'),user=config.get('db_user', 'root'),password=config.get('db_pwd', '123'),port=config.get('db_port', 3306))return RetryMySQLDatabase._instance# 如何使用?
# 在model文件中
database = RetryMySQLDatabase.get_db_instance()为了不用不停的连接断开peewee提供with 操作
with database.connection_context():Person.select()....转载 https://blog.csdn.net/max229max/article/details/90512313
三、ssh访问数据库的实例
- 方法一
from peewee import * from playhouse.db_url import connect from sshtunnel import SSHTunnelForwarderserver = SSHTunnelForwarder((sshServerB_ip, sshServerB_port), # 跳板机配置ssh_password=sshServerB_pwd,ssh_username=sshServerB_usr,remote_bind_address=(databaseA_ip, databaseA_port) # 远程的MySQL|Redis服务器) server.start() destination_lib = connect('mysql://%s:%s@127.0.0.1:%d/%s' % (databaseA_usr, databaseA_pwd, server.local_bind_port, databaseA_db)) ''' your code to operate the databaseA ''' server.close()
使用SSHTunnelForwarder隧道,通过跳板机链接MySQL
- 方法二 使用SSHTunnelForwarder隧道,通过跳板机链接Redis
通过SSHTunnelForwarder,paramiko模块,先ssh到跳板机,然后在跳板机上(或者内部服务器上),获取到权限,然后远程Redis。
使用SSHTunnelForwarder模块,通过本地22端口ssh到跳板机,然后本地开启一个转发端口给跳板机远程Redis服务使用。
import sshtunnel with SSHTunnelForwarder(('xxx.xxx.xx.xx', 22), # 跳板机ssh_username=username,ssh_pkey="/Users/xxx/.ssh/id_rsa",remote_bind_address=('xx.xx.xx.xxx', 6379), # 远程的Redis服务器local_bind_address=('0.0.0.0', 10022) # 开启本地转发端口 ) as server:server.start() # 开启隧道print(server.local_bind_port)# 本地通过local_bind_port端口转发,利用跳板机,链接Redis服务cls.red = redis.Redis(host='127.0.0.1', port=server.local_bind_port, db=db, decode_responses=True)server.close() # 关闭隧道
ORM框架Peewee六(连接池、主从、重连、ssh连接)相关推荐
- Python ORM框架peewee
文章目录 简介 安装 初试 表的创建和插入数据 INSERT INTO ... VALUES (...) 表的删除 DROP TABLE 表的更新 ALTER TABLE 表的查询 SELECT .. ...
- Python轻量级ORM框架——peewee
这里写目录标题 Python中常用的ORM框架 peewee使用经验 从数据库中导出模型 查询 统计类查询 优化子查询 参考文章 Python中常用的ORM框架 SQLALchemy:重量级框架,适合 ...
- python连接池原理_python redis之连接池的原理
python redis之连接池的原理 什么是连接池 通常情况下, 当我们需要做redis操作时, 会创建一个连接, 并基于这个连接进行redis操作, 操作完成后, 释放连接, 一般情况下, 这是没 ...
- Django使用mysql连接池_Django db使用MySQL连接池
Django db使用MySQL连接池 Sep 25 2016 Django db模块本身不支持MySQL连接池,只有一个配置CONN_MAX_AGE连接最大存活时间,如果WSGI服务器使用了线程池技 ...
- mysql 连接池 数量_mysql合理配置连接池数量
我们经常会遇见"MySQL: ERROR 1040: Too many connections"的情况,一种是访问量确实很高,MySQL服务器抗不住,这个时候就要考虑增加从服务器分 ...
- java实现并发连接池_java并发实战:连接池实现
池化技术简介 在我们使用数据库的过程中,我们往往使用数据库连接池而不是直接使用数据库连接进行操作,这是因为每一个数据库连接的创建和销毁的代价是昂贵的,而池化技术则预先创建了资源,这些资源是可复用的,这 ...
- python pymysql连接池_杂项之pymysql连接池
杂项之pymysql连接池 本节内容 本文的诞生 连接池及单例模式 多线程提升 协程提升 后记 1.本文的诞生 由于前几天接触了pymysql,在测试数据过程中,使用普通的pymysql插入100W条 ...
- mysql连接池的工作原理_连接池工作原理
连接池工作原理 连接池技术的核心思想是连接复用,通过建立一个数据库连接池以及一套连接使用.分配和管理策略,使得该连接池中的连接可以得到高效.安全的复用,避免了数据库连接频繁建立.关闭的开销. 连接池的 ...
- 11.什么是Redis连接池?如何使用Redis连接池? 嘻哈的简写笔记——Redis
1.什么是Redis连接池? Redis 和MySQL一样都有连接池,使用连接池可以***避免频繁的创建和销毁链接对象而消耗资源***: 2.如何使用Redis连接池? 创建连接池配置对象: 创建连接 ...
最新文章
- Hadoop 全分布模式 平台搭建
- 【iOS 开发】Objective-C 入门 Xcode 环境详解
- 强监管下 协议支付会是互金平台救命稻草?(协议支付是代扣协议的升级版)
- Java中只有按值传递,没有按引用传递!
- Android底部导航栏实现(一)之BottomNavigationBar
- javascript 里Array的一些方法
- 7/7 第7篇 函数名与函数指针
- Django+Scrapy结合使用并爬取数据入库
- Linux下的网卡驱动程序的编写过程(转)
- final可以修饰哪些java名词_Java关键知识点 - Java final关键字到底修饰了什么?
- 如何高效的开展测试工作?
- 腾讯Docker云平台GaiaStack
- 如何在html编辑文字信息,怎样简单修改网页中的内容,例如图片文字等?
- 为什么逍遥子说,双11已成全球的社会大协同?
- 170929 逆向-Reversing.kr(Ransomware)
- 使用Audacity对清浊音进行频谱分析
- JVM中OOM和SOF的产生
- php推送消息到邮箱,thinkphp3.2通过PHPMailer发送邮件推送消息
- JAVA SE (7)
- NOIP练习赛题目1