电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

解決python存數據庫速度太慢的問題

瀏覽:3日期:2022-06-23 10:40:39
問題

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

def read_to_mysql(filecata, targetDir): ’’’ 用來寫入數據庫,寫入后會剪貼掉文件 filecata 為保存有文件地址的list,已去掉尾部的空格 :param filecata: 文件目錄 :param targetDir: 要復制的目標目錄 :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) # 用來剪切的函數,此處不影響,因而省略 cursor.close() conn.close()解決方案

經測試發現,影響速度的主要原因是commit(),因為沒過幾秒提交一次即可,但是因為提交的字符長度有限制,所以要設置一個合理的時間讀取,代碼修改如下:

def read_to_mysql(filecata, targetDir): ’’’ 用來寫入數據庫,寫入后會剪貼掉文件 filecata 為保存有文件地址的list,已去掉尾部的空格 :param filecata: :param targetDir: 要復制的目標目錄 :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

此時寫入三萬八千條數據需要9秒

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

解決游標遍歷慢的方法:

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

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

補充:python 讀取文件時速度的問題

'''舉例 讀取文件'''# 第一種方式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

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

原生的f是將文件內容讀到生成器中, 當需要操作時,從生成器中循環出來,速度很快,操作大文件時建議用第二種方式!

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 长沙中央空调维修,中央空调清洗维保,空气能热水工程,价格,公司就找维小保-湖南维小保环保科技有限公司 | 北京中创汇安科贸有限公司 | 尊享蟹太太美味,大闸蟹礼卡|礼券|礼盒在线预订-蟹太太官网 | 液氮罐_液氮容器_自增压液氮罐-北京君方科仪科技发展有限公司 | 旋片真空泵_真空泵_水环真空泵_真空机组-深圳恒才机电设备有限公司 | 智能终端_RTU_dcm_北斗星空自动化科技| 定做大型恒温循环水浴槽-工业用不锈钢恒温水箱-大容量低温恒温水槽-常州精达仪器 | 重庆磨床过滤机,重庆纸带过滤机,机床伸缩钣金,重庆机床钣金护罩-重庆达鸿兴精密机械制造有限公司 | 广东机电安装工程_中央空调工程_东莞装饰装修-广东粤标建设有限公司 | 无线讲解器-导游讲解器-自助讲解器-分区讲解系统 品牌生产厂家[鹰米讲解-合肥市徽马信息科技有限公司] | 南京技嘉环保科技有限公司-杀菌除臭剂|污水|垃圾|厕所|橡胶厂|化工厂|铸造厂除臭剂 | RFID电子标签厂家-上海尼太普电子有限公司 | 电子海图系统-电梯检验系统-智慧供热系统开发-商品房预售资金监管系统 | MVE振动电机_MVE震动电机_MVE卧式振打电机-河南新乡德诚生产厂家 | 杭州实验室尾气处理_实验台_实验室家具_杭州秋叶实验设备有限公司 | 菏泽商标注册_菏泽版权登记_商标申请代理_菏泽商标注册去哪里 | 北京银联移动POS机办理_收银POS机_智能pos机_刷卡机_收银系统_个人POS机-谷骐科技【官网】 | 旗杆生产厂家_不锈钢锥形旗杆价格_铝合金电动旗杆-上海锥升金属科技有限公司 | 超声波电磁流量计-液位计-孔板流量计-料位计-江苏信仪自动化仪表有限公司 | 「银杏树」银杏树行情价格_银杏树种植_山东程锦园林 | 武汉高低温试验箱_恒温恒湿试验箱厂家-武汉蓝锐环境科技有限公司 | 一氧化氮泄露报警器,二甲苯浓度超标报警器-郑州汇瑞埔电子技术有限公司 | 铸铁平台,大理石平台专业生产厂家_河北-北重机械 | 首页-浙江橙树网络技术有限公司 石磨面粉机|石磨面粉机械|石磨面粉机组|石磨面粉成套设备-河南成立粮油机械有限公司 | 微动开关厂家-东莞市德沃电子科技有限公司 | 沈阳液压泵_沈阳液压阀_沈阳液压站-沈阳海德太科液压设备有限公司 | 西门子伺服控制器维修-伺服驱动放大器-828D数控机床维修-上海涌迪 | 苹果售后维修点查询,苹果iPhone授权售后维修服务中心 – 修果网 拼装地板,悬浮地板厂家,悬浮式拼装运动地板-石家庄博超地板科技有限公司 | 河南膏药贴牌-膏药代加工-膏药oem厂家-洛阳今世康医药科技有限公司 | 商用绞肉机-熟肉切片机-冻肉切丁机-猪肉开条机 - 广州市正盈机械设备有限公司 | 储气罐,真空罐,缓冲罐,隔膜气压罐厂家批发价格,空压机储气罐规格型号-上海申容压力容器集团有限公司 | 品牌策划-品牌设计-济南之式传媒广告有限公司官网-提供品牌整合丨影视创意丨公关活动丨数字营销丨自媒体运营丨数字营销 | 耐力板-PC阳光板-PC板-PC耐力板 - 嘉兴赢创实业有限公司 | 水稻烘干机,小麦烘干机,大豆烘干机,玉米烘干机,粮食烘干机_巩义市锦华粮食烘干机械制造有限公司 水环真空泵厂家,2bv真空泵,2be真空泵-淄博真空设备厂 | 整车VOC采样环境舱-甲醛VOC预处理舱-多舱法VOC检测环境仓-上海科绿特科技仪器有限公司 | 武汉高低温试验箱_恒温恒湿试验箱厂家-武汉蓝锐环境科技有限公司 | 隐形纱窗|防护纱窗|金刚网防盗纱窗|韦柏纱窗|上海青木装潢制品有限公司|纱窗国标起草单位 | 酒瓶_酒杯_玻璃瓶生产厂家_徐州明政玻璃制品有限公司 | 上海律师咨询_上海法律在线咨询免费_找对口律师上策法网-策法网 广东高华家具-公寓床|学生宿舍双层铁床厂家【质保十年】 | 机构创新组合设计实验台_液压实验台_气动实训台-戴育教仪厂 | 纸布|钩编布|钩针布|纸草布-莱州佳源工艺纸布厂 |