pymysqlslave

Simple Master Slave Load Balancing


Keywords
mysqldb, slave, master, balancing, sqlalchemy
License
Apache-2.0
Install
pip install pymysqlslave==1.0.5

Documentation

Pymysqlslave

SQLAlchemy Simple Master Slave Load Balancing(*beta*)

You can install Pymysqlslave from PyPI with

$ pip install pymysqlslave

Version update

  • 1.0.6 [BUG]MySQLDBSlave open retry not avaliable
  • 1.0.5 [BUG]MySQLDBSlave slaves unavailable. modify MySQLDBSlave reconnect_retry_nums default => 3
  • 1.0.3 add is_auto_allocation(Automatic Identification master and slave)
  • 1.0.1 initialize project

Getting Started

#!/usr/bin/env python
# coding=utf-8

import logging
logging.basicConfig(level=logging.DEBUG)
from sqlalchemy import select

from pymysqlslave import MySQLDBSlave

jianv1 = MySQLDBSlave(
    masters=[
        {
            "name": "mysql+mysqldb://jianxun:jianxun@jianxun.dev:3306/jianxunv2?charset=utf8",
            "echo": False,
            "pool_size": 5,
            "pool_recycle": 1,
        }
    ],
    slaves=[
        {
            "name": "mysql+mysqldb://jianxun:jianxun@jianxunv2.dev:3306/jianxunv2?charset=utf8",
            "echo": False,
            "pool_size": 5,
            "pool_recycle": 1,
        }
    ],
    is_auto_allocation=True)


def get_info_by_email(email):
    _t = jianv1.table.customer_member_t
    sql = select([_t]).where(_t.c.email == email)
    return jianv1.execute(sql).fetchone()


def update_info_by_email(email):
    _t = jianv1.table.customer_member_t
    sql = _t.update().where(_t.c.email == email).values(name=u"穿完")
    jianv1.execute(sql)


if __name__ == "__main__":
    result = get_info_by_email("592030542@qq.com")
    logging.info(result)
    update_info_by_email("592030542@qq.com")

TODO

  • 根据不同的环境,用户选择不同的slave
  • add retry connecting(bug: interactive_timeout)
  • add is_auto_allocation(Automatic Identification master and slave)
  • Thread Safety

Support

If you need help using pymysqlslave or have found a bug, please open a github issue.