一、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. 若有代数式,则以下能够正确表示该代数式的c语言表达是是 07年4月,2007年4月全国计算机等级考试二级笔试试卷...
  2. linux oracle查询乱码问题,Linux环境Oracle显示乱码的解决方法
  3. python语言怎么用-学习如何使用 Python 程式语言
  4. 插入箭头_“PPT立体箭头”这样做
  5. python判断语句的复杂度_Python内置方法的时间复杂度(转)
  6. Pyqt 中__init__(self,parent==None) parent理解
  7. 图片异步加载框架 Android-Universal-Image-Loader
  8. 斯坦福经典AI课程CS 221官方笔记来了!机器学习模型、贝叶斯网络等重点速查...
  9. php foreach、while性能比较
  10. MyBatis入门使用及其四大核心对象
  11. chrome frame 在 iframe frameset 下无效 的处理方法
  12. css3边框交替动画_用纯CSS3制作的效果非常炫酷的元素边框线条动画特效
  13. 一场别开生面的黑客面基大会
  14. 笔迹宽度估计的低质量文本图像二值化(Robust Document Image Binarization Technique for Degraded Document Images)
  15. 爱国者P8880,完美展示!
  16. 【猿如意】中的『Bluefish』工具详情介绍
  17. 被掰弯的线性函数,海王一样的logstic
  18. JAVA表示姓名和对应的出生日期
  19. 基于jsp+mysql+ssm妇女联合会管理系统-计算机毕业设计
  20. webpack 模块打包器

热门文章

  1. MiniGUI--ubuntu16下安装配置MiniGUI 3.2.0
  2. 【读书札记】SQL笛卡尔积的运用
  3. 渲染用计算机功耗,用了功率计,才发现原来电脑功耗其实并不大,买大功率电源是否浪费?...
  4. 嵌入式开发八大入门的知识点
  5. 如何从win10中获取3D模型(GLB格式)
  6. alfred 开发_适用于开发人员设计师和博客的7种Alfred工作流程
  7. Mac OS 使用远程桌面登录服务器
  8. 天猫上有哪些值得信赖的购买ipad的旗舰店推荐?
  9. mapbox设置地图语言为中文,支持JavaScript和Vue
  10. 谈谈我对京东的认识(6):京东云提供的5大类云服务