最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

后臺(tái)服務(wù)在運(yùn)行時(shí)發(fā)現(xiàn)一個(gè)問(wèn)題,運(yùn)行約15分鐘后,接口請(qǐng)求報(bào)錯(cuò)

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

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

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

如何解決這個(gè)問(wèn)題呢

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

class MysqlConnection(object):

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

	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()

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

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

這里寫圖片描述

Connection、Cursor形象比喻

這里寫圖片描述

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

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

這里寫圖片描述

connection對(duì)象支持的方法

這里寫圖片描述

Cursor對(duì)象支持的方法

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

這里寫圖片描述

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

這里寫圖片描述

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

self.connection._write_timeout = 10000

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

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

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

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

打印self.connection ,輸出如下:

<pymysql.connections.Connection object at 0x0000000003E2CCC0>

拋出異常重新connect是不行的,因?yàn)?code>connections 仍存在未失效

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

這個(gè)該方法的源碼

 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

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

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

不過(guò)這樣的方式雖然能解決問(wèn)題,但是感覺相對(duì)較low,希望有更好的處理方法

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

import pymysql
class DBManager(object):

  def __init__(self,config):
    self.connection = pymysql.connect(**config) # config為數(shù)據(jù)庫(kù)登錄驗(yàn)證配置信息
    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()

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

相關(guān)文章

  • python仿抖音表白神器

    python仿抖音表白神器

    這篇文章主要教大家制作python抖音表白神器,仿制抖音表白小軟件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • 解析Python擴(kuò)展模塊的加速方案

    解析Python擴(kuò)展模塊的加速方案

    這章我們來(lái)介紹Python的擴(kuò)展名之ctypes,教大家認(rèn)識(shí)ctypes,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2021-09-09
  • Python用函數(shù)思想完成哥德巴赫猜想代碼分析

    Python用函數(shù)思想完成哥德巴赫猜想代碼分析

    在本篇文章里小編給大家整理的是一篇關(guān)于Python用函數(shù)思想完成哥德巴赫猜想代碼分析,有興趣的朋友們可以參考下。
    2021-06-06
  • Python中線程threading.Thread的使用詳解

    Python中線程threading.Thread的使用詳解

    python的thread模塊是比較底層的模塊,python的threading模塊是對(duì)thread做了一些包裝的,可以更加方便的被使用。本文將為大家詳細(xì)介紹一下python中的線程threading.Thread()的使用,需要的可以參考一下
    2022-07-07
  • Pytorch之卷積層的使用詳解

    Pytorch之卷積層的使用詳解

    今天小編就為大家分享一篇Pytorch之卷積層的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • PyCharm設(shè)置SSH遠(yuǎn)程調(diào)試的方法

    PyCharm設(shè)置SSH遠(yuǎn)程調(diào)試的方法

    這篇文章主要介紹了PyCharm設(shè)置SSH遠(yuǎn)程調(diào)試的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • vscode配置anaconda3的方法步驟

    vscode配置anaconda3的方法步驟

    這篇文章主要介紹了vscode配置anaconda3的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 使用原生Python編寫Hadoop?MapReduce程序

    使用原生Python編寫Hadoop?MapReduce程序

    在大數(shù)據(jù)處理領(lǐng)域,Hadoop?MapReduce是一個(gè)廣泛使用的框架,用于處理和生成大規(guī)模數(shù)據(jù)集,本文將使用原生Python編寫Hadoop?MapReduce程序,需要的可以參考下
    2025-02-02
  • pycharm解決關(guān)閉flask后依舊可以訪問(wèn)服務(wù)的問(wèn)題

    pycharm解決關(guān)閉flask后依舊可以訪問(wèn)服務(wù)的問(wèn)題

    這篇文章主要介紹了pycharm解決關(guān)閉flask后依舊可以訪問(wèn)服務(wù)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • 利用Python庫(kù)Scapy解析pcap文件的方法

    利用Python庫(kù)Scapy解析pcap文件的方法

    今天小編就為大家分享一篇利用Python庫(kù)Scapy解析pcap文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07

最新評(píng)論

上饶县| 昌邑市| 天水市| 吴旗县| 兴国县| 建瓯市| 礼泉县| 景洪市| 信阳市| 徐州市| 禄丰县| 金山区| 阳西县| 石景山区| 遂川县| 蕲春县| 循化| 龙里县| 根河市| 从化市| 屏东县| 阿尔山市| 泾川县| 子洲县| 高安市| 北碚区| 河间市| 金寨县| 巧家县| 博湖县| 扎兰屯市| 新竹县| 玛多县| 特克斯县| 乌鲁木齐县| 溧水县| 白沙| 二手房| 留坝县| 永平县| 当阳市|