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

解決python存數(shù)據(jù)庫速度太慢的問題

 更新時(shí)間:2021年04月07日 10:43:07   作者:馬里奧愛學(xué)習(xí)  
這篇文章主要介紹了解決python存數(shù)據(jù)庫速度太慢的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧

問題

在項(xiàng)目中遇到一個(gè)問題,需要從文本中讀取三萬條數(shù)據(jù)寫入mysql數(shù)據(jù)庫,文件中為用@分割的sql語句,但是在讀取的過程中發(fā)現(xiàn)速度過慢,三萬八千條數(shù)據(jù)需要220秒,問題代碼片段如下:

def read_to_mysql(filecata, targetDir):
 '''
 用來寫入數(shù)據(jù)庫,寫入后會(huì)剪貼掉文件
 filecata 為保存有文件地址的list,已去掉尾部的空格
 :param filecata: 文件目錄
 :param targetDir: 要復(fù)制的目標(biāo)目錄
 :return:
 '''
 root_dir = os.path.abspath(os.path.join(os.getcwd(), "./"))
 config = configparser.ConfigParser()
 config.read(root_dir + "/config.ini")
 __host = config.get("DatabaseOfWRT", "host")
 __database_name = config.get("DatabaseOfWRT", "database")
 __user_name = config.get("DatabaseOfWRT", "username")
 __user_passwaord = config.get("DatabaseOfWRT", "password")
 __charset = config.get("DatabaseOfWRT", "charset")
 conn = pymysql.connect(
  host=__host,
  user=__user_name, password=__user_passwaord,
  database=__database_name,
  charset=__charset
 )
 cursor = conn.cursor()
 with open(filecata, "r", encoding='utf-8') as f:
  data = f.read() # 讀取文件
  data_list = data.split('@')
  del data_list[-1]
  starttime = int(time.time())
  for data_str in data_list:
   data_str = str(data_str)
   sql = data_str + ';'
   cursor.execute(sql)
   conn.commit()
   print(flag)
 copy_del_file(filecata, targetDir) # 用來剪切的函數(shù),此處不影響,因而省略
 cursor.close()
 conn.close()

解決方案

經(jīng)測試發(fā)現(xiàn),影響速度的主要原因是commit(),因?yàn)闆]過幾秒提交一次即可,但是因?yàn)樘峤坏淖址L度有限制,所以要設(shè)置一個(gè)合理的時(shí)間讀取,代碼修改如下:

def read_to_mysql(filecata, targetDir):
 '''
 用來寫入數(shù)據(jù)庫,寫入后會(huì)剪貼掉文件
 filecata 為保存有文件地址的list,已去掉尾部的空格
 :param filecata:
 :param targetDir: 要復(fù)制的目標(biāo)目錄
 :return:
 '''
 root_dir = os.path.abspath(os.path.join(os.getcwd(), "./"))
 config = configparser.ConfigParser()
 config.read(root_dir + "/config.ini")
 __host = config.get("DatabaseOfWRT", "host")
 __database_name = config.get("DatabaseOfWRT", "database")
 __user_name = config.get("DatabaseOfWRT", "username")
 __user_passwaord = config.get("DatabaseOfWRT", "password")
 __charset = config.get("DatabaseOfWRT", "charset")
 conn = pymysql.connect(
  host=__host,
  user=__user_name, password=__user_passwaord,
  database=__database_name,
  charset=__charset
 )
 cursor = conn.cursor()
 with open(filecata, "r", encoding='utf-8') as f:
  data = f.read() # 讀取文件
  data_list = data.split('@')
  del data_list[-1]
  starttime = int(time.time())
  for data_str in data_list:
   endtime = int(time.time())
   data_str = str(data_str)
   sql = data_str + ';'
   cursor.execute(sql)
   if endtime - starttime ==10: # 每過十秒提交一次
    starttime = int(time.time())
    conn.commit()
 conn.commit()
 copy_del_file(filecata, targetDir)
 cursor.close()
 conn.close()
 return flag

此時(shí)寫入三萬八千條數(shù)據(jù)需要9秒

補(bǔ)充:python 連數(shù)據(jù)庫cursur.fetchall ()速度慢的解決方案

解決游標(biāo)遍歷慢的方法:

一行一行去遍歷,而不是一下全部讀取出來

將cursur.fetchall()更改為for i in cursur:

補(bǔ)充:python 讀取文件時(shí)速度的問題

"""舉例 讀取文件"""
# 第一種方式
with open('test.txt', 'r', encoding='utf-8') as f:
 info = f.readlines()
 for line in info:
 pass
# 第二種方式
with open('test.txt', 'r', encoding='utf-8') as f:
 for line in f:
 pass

對于以上兩種方式讀取文件,各自有各自的用途,當(dāng)用兩種方式都可以時(shí),第二種方式的效率是第一種的幾個(gè)量級, readlines()將文件內(nèi)容讀取到內(nèi)存的list中,操作雖然方便,但是消耗內(nèi)存,運(yùn)行效率慢。

原生的f是將文件內(nèi)容讀到生成器中, 當(dāng)需要操作時(shí),從生成器中循環(huán)出來,速度很快,操作大文件時(shí)建議用第二種方式!

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Python OS模塊實(shí)例詳解

    Python OS模塊實(shí)例詳解

    這篇文章主要介紹了Python OS模塊,結(jié)合實(shí)例形式總結(jié)分析了Python使用OS解析文件路徑、判斷文件、目錄等相關(guān)操作技巧,需要的朋友可以參考下
    2019-04-04
  • python3 破解 geetest(極驗(yàn))的滑塊驗(yàn)證碼功能

    python3 破解 geetest(極驗(yàn))的滑塊驗(yàn)證碼功能

    這篇文章主要介紹了python3 破解 geetest(極驗(yàn))的滑塊驗(yàn)證碼功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • PyQt5中QPushButton的用法詳細(xì)解析與應(yīng)用實(shí)戰(zhàn)

    PyQt5中QPushButton的用法詳細(xì)解析與應(yīng)用實(shí)戰(zhàn)

    PyQt5 是一個(gè)用于創(chuàng)建圖形用戶界面的 Python 綁定庫,它基于 Qt5 應(yīng)用程序框架,在 PyQt5 中,QPushButton 是一個(gè)常用的控件,用于創(chuàng)建按鈕,允許用戶通過點(diǎn)擊來觸發(fā)某些操作,本文將詳細(xì)介紹 QPushButton 的用法,并通過實(shí)際案例來展示其強(qiáng)大的功能
    2024-07-07
  • python?dowhy數(shù)據(jù)估計(jì)因果分析功能探索

    python?dowhy數(shù)據(jù)估計(jì)因果分析功能探索

    這篇文章主要為大家介紹了python?dowhy數(shù)據(jù)估計(jì)因果分析功能實(shí)例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-02-02
  • python3爬蟲獲取html內(nèi)容及各屬性值的方法

    python3爬蟲獲取html內(nèi)容及各屬性值的方法

    今天小編就為大家分享一篇python3爬蟲獲取html內(nèi)容及各屬性值的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python 如何將兩個(gè)實(shí)數(shù)矩陣合并為一個(gè)復(fù)數(shù)矩陣

    python 如何將兩個(gè)實(shí)數(shù)矩陣合并為一個(gè)復(fù)數(shù)矩陣

    這篇文章主要介紹了使用python實(shí)現(xiàn)將兩個(gè)實(shí)數(shù)矩陣合并為一個(gè)復(fù)數(shù)矩陣的操作,具有很好的參考價(jià)值,希望對大家有所幫助。
    2021-05-05
  • Python3 中作為一等對象的函數(shù)解析

    Python3 中作為一等對象的函數(shù)解析

    這篇文章主要介紹了Python3 中作為一等對象的函數(shù),本文通過實(shí)例代碼講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Python爬蟲之爬取二手房信息

    Python爬蟲之爬取二手房信息

    這篇文章主要介紹了Python爬蟲之爬取二手房信息,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python爬蟲的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • 如何使用Cython對python代碼進(jìn)行加密

    如何使用Cython對python代碼進(jìn)行加密

    這篇文章主要介紹了如何使用Cython對python代碼進(jìn)行加密,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 詳解python內(nèi)置模塊urllib

    詳解python內(nèi)置模塊urllib

    這篇文章主要介紹了python內(nèi)置模塊urllib的相關(guān)資料,幫助大家更好的理解和使用python 內(nèi)置模塊,感興趣的朋友可以了解下
    2020-09-09

最新評論

安多县| 阿拉善右旗| 两当县| 裕民县| 宝兴县| 普定县| 康乐县| 龙里县| 平安县| 太保市| 泰顺县| 泸溪县| 武城县| 南丹县| 洛宁县| 铜山县| 交城县| 陆良县| 得荣县| 垦利县| 宿迁市| 高邮市| 岳普湖县| 伊宁市| 托克逊县| 常宁市| 洮南市| 航空| 五华县| 睢宁县| 罗甸县| 衡东县| 河曲县| 石首市| 麻阳| 湘阴县| 广平县| 遂平县| 陇南市| 南皮县| 南平市|