zoukankan      html  css  js  c++  java
  • MySQL 重连机制

    一.

    coon.ping(reconnect=True)

    二.

    #!/usr/bin/env python
    # -*-coding:UTF-8-*-
    import sys, MySQLdb, traceback
    import time
    
    
    class mysql:
        def __init__(self,
                     host='',
                     user='',
                     passwd='',
                     db='',
                     port=3306,
                     charset='utf8'
                     ):
            self.host = host
            self.user = user
            self.passwd = passwd
            self.db = db
            self.port = port
            self.charset = charset
            self.conn = None
            self._conn()
    
        def _conn(self):
            try:
                self.conn = MySQLdb.Connection(self.host, self.user, self.passwd, self.db, self.port, self.charset)
                return True
            except:
                return False
    
        def _reConn(self, num=28800, stime=3):  # 重试连接总次数为1天,这里根据实际情况自己设置,如果服务器宕机1天都没发现就......
            _number = 0
            _status = True
            while _status and _number <= num:
                try:
                    self.conn.ping()  # cping 校验连接是否异常
                    _status = False
                except:
                    if self._conn() == True:  # 重新连接,成功退出
                        _status = False
                        break
                    _number += 1
                    time.sleep(stime)  # 连接不成功,休眠3秒钟,继续循环,知道成功或重试次数结束
    
        def select(self, sql=''):
            try:
                self._reConn()
                self.cursor = self.conn.cursor(MySQLdb.cursors.DictCursor)
                self.cursor.execute(sql)
                result = self.cursor.fetchall()
                self.cursor.close()
                return result
            except MySQLdb.Error, e:
                # print "Error %d: %s" % (e.args[0], e.args[1])
                return False
    
        def select_limit(self, sql='', offset=0, length=20):
            sql = '%s limit %d , %d ;' % (sql, offset, length)
            return self.select(sql)
    
        def query(self, sql=''):
            try:
                self._reConn()
                self.cursor = self.conn.cursor(MySQLdb.cursors.DictCursor)
                self.cursor.execute("set names utf8")  # utf8 字符集
                result = self.cursor.execute(sql)
                self.conn.commit()
                self.cursor.close()
                return (True, result)
            except MySQLdb.Error, e:
                return False
    
        def close(self):
            self.conn.close()
    
    
    if __name__ == '__main__':
        my = mysql('localhost', 'root', 'root', 'test', 3306)
        print my.select_limit('select * from a_table', 1, 1)
        # my.close()
  • 相关阅读:
    21.错误和异常
    20.装饰器相关
    19.装饰器
    18.函数编程的练习
    Remove Duplicates from Sorted List II
    Ubuntu 12.04输入密码登陆后又跳回到登录界面
    Remove Linked List Elements
    Populating Next Right Pointers in Each Node *
    Convert Sorted Array to Binary Search Tree
    Flatten Binary Tree to Linked List *
  • 原文地址:https://www.cnblogs.com/shangwei/p/13858506.html
Copyright © 2011-2022 走看看