一、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
  1. 通过SSHTunnelForwarder,paramiko模块,先ssh到跳板机,然后在跳板机上(或者内部服务器上),获取到权限,然后远程Redis。

  2. 使用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连接)相关推荐

  1. Python ORM框架peewee

    文章目录 简介 安装 初试 表的创建和插入数据 INSERT INTO ... VALUES (...) 表的删除 DROP TABLE 表的更新 ALTER TABLE 表的查询 SELECT .. ...

  2. Python轻量级ORM框架——peewee

    这里写目录标题 Python中常用的ORM框架 peewee使用经验 从数据库中导出模型 查询 统计类查询 优化子查询 参考文章 Python中常用的ORM框架 SQLALchemy:重量级框架,适合 ...

  3. python连接池原理_python redis之连接池的原理

    python redis之连接池的原理 什么是连接池 通常情况下, 当我们需要做redis操作时, 会创建一个连接, 并基于这个连接进行redis操作, 操作完成后, 释放连接, 一般情况下, 这是没 ...

  4. Django使用mysql连接池_Django db使用MySQL连接池

    Django db使用MySQL连接池 Sep 25 2016 Django db模块本身不支持MySQL连接池,只有一个配置CONN_MAX_AGE连接最大存活时间,如果WSGI服务器使用了线程池技 ...

  5. mysql 连接池 数量_mysql合理配置连接池数量

    我们经常会遇见"MySQL: ERROR 1040: Too many connections"的情况,一种是访问量确实很高,MySQL服务器抗不住,这个时候就要考虑增加从服务器分 ...

  6. java实现并发连接池_java并发实战:连接池实现

    池化技术简介 在我们使用数据库的过程中,我们往往使用数据库连接池而不是直接使用数据库连接进行操作,这是因为每一个数据库连接的创建和销毁的代价是昂贵的,而池化技术则预先创建了资源,这些资源是可复用的,这 ...

  7. python pymysql连接池_杂项之pymysql连接池

    杂项之pymysql连接池 本节内容 本文的诞生 连接池及单例模式 多线程提升 协程提升 后记 1.本文的诞生 由于前几天接触了pymysql,在测试数据过程中,使用普通的pymysql插入100W条 ...

  8. mysql连接池的工作原理_连接池工作原理

    连接池工作原理 连接池技术的核心思想是连接复用,通过建立一个数据库连接池以及一套连接使用.分配和管理策略,使得该连接池中的连接可以得到高效.安全的复用,避免了数据库连接频繁建立.关闭的开销. 连接池的 ...

  9. 11.什么是Redis连接池?如何使用Redis连接池? 嘻哈的简写笔记——Redis

    1.什么是Redis连接池? Redis 和MySQL一样都有连接池,使用连接池可以***避免频繁的创建和销毁链接对象而消耗资源***: 2.如何使用Redis连接池? 创建连接池配置对象: 创建连接 ...

最新文章

  1. Hadoop 全分布模式 平台搭建
  2. 【iOS 开发】Objective-C 入门 Xcode 环境详解
  3. 强监管下 协议支付会是互金平台救命稻草?(协议支付是代扣协议的升级版)
  4. Java中只有按值传递,没有按引用传递!
  5. Android底部导航栏实现(一)之BottomNavigationBar
  6. javascript 里Array的一些方法
  7. 7/7 第7篇 函数名与函数指针
  8. Django+Scrapy结合使用并爬取数据入库
  9. Linux下的网卡驱动程序的编写过程(转)
  10. final可以修饰哪些java名词_Java关键知识点 - Java final关键字到底修饰了什么?
  11. 如何高效的开展测试工作?
  12. 腾讯Docker云平台GaiaStack
  13. 如何在html编辑文字信息,怎样简单修改网页中的内容,例如图片文字等?
  14. 为什么逍遥子说,双11已成全球的社会大协同?
  15. 170929 逆向-Reversing.kr(Ransomware)
  16. 使用Audacity对清浊音进行频谱分析
  17. JVM中OOM和SOF的产生
  18. php推送消息到邮箱,thinkphp3.2通过PHPMailer发送邮件推送消息
  19. JAVA SE (7)
  20. NOIP练习赛题目1

热门文章

  1. 商城倒计时(时分秒倒计时、分秒毫秒倒计时)
  2. 基于物联网地铁自动售票检票智能系统
  3. 合唱团(动态规划问题)
  4. 2022-2028全球与中国液化石油气储罐市场现状及未来发展趋势
  5. 【Word文档】填表时在方框中打对号(插入带方框内的对号)
  6. 考博英语连接词if、that与because的用法
  7. 商品分类目录数据结构分析
  8. 捷顺车库系统无法联接服务器器,捷顺停车场管理系统常见故障与讲解.ppt
  9. 开源系列:AI对抗攻防算法开源平台,哪家强?
  10. 安装APP时弹窗未知风险未知开发者,还能下载吗?