亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python mysql斷開重連的實現(xiàn)方法

 更新時間:2019年07月26日 14:25:03   作者:sysu_lluozh  
這篇文章主要介紹了python mysql斷開重連的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

后臺服務(wù)在運行時發(fā)現(xiàn)一個問題,運行約15分鐘后,接口請求報錯

pymysql.err.InterfaceError: (0, '')

這個錯誤提示一般發(fā)生在將None賦給多個值,定位問題時發(fā)現(xiàn)

pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')

如何解決這個問題呢

出現(xiàn)問題的代碼

class MysqlConnection(object):

	"""
	mysql操作類,對mysql數(shù)據(jù)庫進行增刪改查
	"""

	def __init__(self, config):
		# Connect to the database
		self.connection = pymysql.connect(**config)
		self.cursor = self.connection.cursor()

	def Query(self, sql):
		"""
		查詢數(shù)據(jù)
		:param sql:
		:return:
		"""
		self.cursor.execute(sql)
		return self.cursor.fetchall()

在分析問題前,先看看Python 數(shù)據(jù)庫的Connection、Cursor兩大對象

Python 數(shù)據(jù)庫圖解流程

這里寫圖片描述

Connection、Cursor形象比喻

這里寫圖片描述

Connection()的參數(shù)列表

  • host,連接的數(shù)據(jù)庫服務(wù)器主機名,默認為本地主機(localhost)
  • user,連接數(shù)據(jù)庫的用戶名,默認為當前用戶
  • passwd,連接密碼,沒有默認值
  • db,連接的數(shù)據(jù)庫名,沒有默認值
  • conv,將文字映射到Python類型的字典
  • cursorclass,cursor()使用的種類,默認值為MySQLdb.cursors.Cursor
  • compress,啟用協(xié)議壓縮功能
  • named_pipe,在windows中,與一個命名管道相連接
  • init_command,一旦連接建立,就為數(shù)據(jù)庫服務(wù)器指定一條語句來運行
  • read_default_file,使用指定的MySQL配置文件
  • read_default_group,讀取的默認組
  • unix_socket,在unix中,連接使用的套接字,默認使用TCP
  • port,指定數(shù)據(jù)庫服務(wù)器的連接端口,默認是3306

這里寫圖片描述

connection對象支持的方法

這里寫圖片描述

Cursor對象支持的方法

用于執(zhí)行查詢和獲取結(jié)果

這里寫圖片描述

execute方法:執(zhí)行SQL,將結(jié)果從數(shù)據(jù)庫獲取到客戶端

這里寫圖片描述

調(diào)試代碼,將超時時間設(shè)置較長

self.connection._write_timeout = 10000

發(fā)現(xiàn)并沒有生效

使用try...except... 方法捕獲失敗后重新連接數(shù)據(jù)庫

try:
	self.cursor.execute(sql)
except:
	self.connection()
	self.cursor.execute(sql)

直接拋出異常,并沒有執(zhí)行except代碼段

打印self.connection ,輸出如下:

<pymysql.connections.Connection object at 0x0000000003E2CCC0>

拋出異常重新connect是不行的,因為connections 仍存在未失效

找到一種方法可以解決問題,在每次連接之前,判斷該鏈接是否有效,pymysql提供的接口是 Connection.ping()

這個該方法的源碼

 def ping(self, reconnect=True):
    """Check if the server is alive"""
    if self._sock is None:
      if reconnect:
        self.connect()
        reconnect = False
      else:
        raise err.Error("Already closed")
    try:
      self._execute_command(COMMAND.COM_PING, "")
      return self._read_ok_packet()
    except Exception:
      if reconnect:
        self.connect()
        return self.ping(False)
      else:
        raise

在每次請求數(shù)據(jù)庫前執(zhí)行如下代碼

def reConnect(self):
	try:
		self.connection.ping()
	except:
		self.connection()

不過這樣的方式雖然能解決問題,但是感覺相對較low,希望有更好的處理方法

目前已實現(xiàn)的數(shù)據(jù)庫查詢這部分的代碼

import pymysql
class DBManager(object):

  def __init__(self,config):
    self.connection = pymysql.connect(**config) # config為數(shù)據(jù)庫登錄驗證配置信息
    self.cursor = self.connection.cursor()

  def query(self, sql, params):
    try:
      with self.connection.cursor() as cursor:
        cursor.execute(sql, params)
        result = cursor.fetchall()
        self.connection.commit()
        return result
        # self.connection.close()
    except Exception as e:
      traceback.print_exc()

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python實現(xiàn)linux服務(wù)器批量修改密碼并生成execl

    python實現(xiàn)linux服務(wù)器批量修改密碼并生成execl

    這篇文章主要介紹了python實現(xiàn)linux服務(wù)器批量修改密碼并生成execl示例,需要的朋友可以參考下
    2014-04-04
  • python中的iterator和"lazy?iterator"區(qū)別介紹

    python中的iterator和"lazy?iterator"區(qū)別介紹

    這篇文章主要介紹了python中的iterator和?“l(fā)azy?iterator“之間有什么區(qū)別,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • 詳解pyppeteer(python版puppeteer)基本使用

    詳解pyppeteer(python版puppeteer)基本使用

    這篇文章主要介紹了詳解pyppeteer(python版puppeteer)基本使用 ,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • python信號量,條件變量和事件詳解

    python信號量,條件變量和事件詳解

    這篇文章主要為大家介紹了python的信號量,條件變量和事件,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Python中使用第三方庫xlrd來寫入Excel文件示例

    Python中使用第三方庫xlrd來寫入Excel文件示例

    這篇文章主要介紹了Python中使用第三方庫xlrd來寫入Excel文件示例,本文講解了安裝xlwt、API介紹、使用xlwt寫入Excel文件實例,需要的朋友可以參考下
    2015-04-04
  • Django中模板的繼承及引用實現(xiàn)

    Django中模板的繼承及引用實現(xiàn)

    Django模版引擎中最強大也是最復(fù)雜的部分就是模版繼承了,頁面的代碼很多,隨隨便便就是幾百行代碼,但是每個頁面之中都有相同的元素。本文主要介紹了Django模板的繼承及引用,感興趣的可以了解一下
    2021-08-08
  • python四則運算表達式求值示例詳解

    python四則運算表達式求值示例詳解

    這篇文章主要為大家介紹了python四則運算表達式求值示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • python字符串,元組,列表,字典互轉(zhuǎn)代碼實例詳解

    python字符串,元組,列表,字典互轉(zhuǎn)代碼實例詳解

    這篇文章主要介紹了python字符串,元組,列表,字典互轉(zhuǎn)代碼實例詳解,需要的朋友可以參考下
    2020-02-02
  • python3+PyQt5 數(shù)據(jù)庫編程--增刪改實例

    python3+PyQt5 數(shù)據(jù)庫編程--增刪改實例

    今天小編就為大家分享一篇python3+PyQt5 數(shù)據(jù)庫編程--增刪改實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • python實現(xiàn)整數(shù)序列求和

    python實現(xiàn)整數(shù)序列求和

    這篇文章主要介紹了python實現(xiàn)整數(shù)序列求和,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評論