pyDAL一个python的ORM(终) pyDAL的一些性能优化

一、大批量插入数据

对于 大量数据插入时,虽然pyDAL也手册中有个方法:bulk_insert(),但是手册也说了,虽然方法上是一次可以多条数据,如果后端数据库是关系型数据库,他转换为SQL时它是一条一条的插入的,只有在NoSQL数据库时能提速bulk_insert()的用法如下,感兴趣的看看:

db.person.bulk_insert([{'name':'Alex','age':'11'}, {'name': 'John','age':'22'}, {'name': 'Tim','age':'33'}])

那后端是关系数据库时,有其他办法吗?答案是我们利用前面 我们提到:db.executesql()方法,直接用SQL,下面是例子,

1、目标:

MySQL数据库我们一次插入2000万的csv文件(普通PC是无法直接打开这么多行的数据文件的

2、解决思路:

(1)分块读取,分块插入,我们已知csv各列的名为:col1,col2,col3,我们每次读10万行,插入库10万行);

(2)使用db.executesql()方法,编写SQL批量插入语句

(3)特别注意:将你的数据库的单条语句的数据包大小适当调大。就mysql而言:

# 服务器接受的数据包的大小,在执行数据量较大的单条语句,如果超过了默认限制,就会报错,提示这个参数大小不足
max_allowed_packet=100M

3、MySQL批量插入数据语法:

INSERT INTO table_name (column1, column2,...) VALUES ("value1_1", "value1_2",...), ("value2_1", "value2_2", ...)......;

4、示例代码:

我们使用到了pandas库,pandas的read_csv()方法可以对非常方便的对大文件分块读取:

import pandas as pd
df_chunk = pd.read_csv('my.csv', chunksize=100000, iterator=True)
for chunk in df_chunk:insert_values = ''for row in range(0, chunk.shape[0]):insert_values += '("' + str(chunk.iloc[row,0]) + '","' + str(chunk.iloc[row,1]) + '","' + str(chunk.iloc[row,2]) + '"),'db.executesql('INSERT INTO my_table (col1,col2,col3) VALUES ' + insert_values[:- 1] + ';')db.commit()

二、对于结果集很大的查询做遍历循环iterselect

     如果我们要对一个查询结果集做遍历循环,且结果数据很大,例如:

for row in db(db.IMEI_table.IMEI.contains('666')).select():

.....

常规的上述写法,一定是先查询得到 完整的结果放在内存中,在做遍历循环,很吃内存,性能也低,针对这种情况,pyDAL提供了iterselect()方法,使用也很方便,如下:

for row in db(db.IMEI_table.IMEI.contains('666')).iterselect():

      ...

当数据量较大时,iterselect()不仅速度快,还节省内存:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/633582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux修行路】基本指令

目录 推荐 前言 1、重新认识操作系统 1.1 操作系统是什么? 1.2操作系统的作用 1.3 我们在计算机上的所有操作 1.4 Linux操作的特点 2、Linux基本指令 2.1 ls 指令 2.2 pwd 命令 2.3 cd 指令 2.3.1 Linux中的目录结构 2.3.2 绝对路径和相对路径 2.3.3 cd 指令 …

2024年科学教育与人文艺术发展国际会议(ICSEHAD 2024)

2024年科学教育与人文艺术发展国际会议(ICSEHAD 2024) 2024 International Conference on Science Education and Humanities and Arts Development(ICSEHAD 2024) 数据库:EI,CPCI,CNKI,Google Scholar等检索 一、【会议简介】 2024年科学教育与人文艺术发展国际会议…

VS支持cuda源码高亮

工具-选项-文本编辑器,添加.cu和.cuh

机器学习之蚁群算法

概念 机器学习中的蚁群算法是一种启发式算法,灵感来源于蚁群在寻找食物时的行为。这种算法模拟了蚂蚁群体的集体智慧,通过多个个体之间的相互合作来解决问题。蚁群算法通常用于解决优化问题,例如路径规划、任务分配和调度等。 基本思想是通过模拟蚂蚁在搜索过程中释放的信…

Onenote是什么?笔记软件Onenote使用指南:简介|功能|下载|替代软件

OneNote是什么? OneNote是微软公司开发的一款强大的笔记软件,它允许用户在各种设备上创建、组织和搜索笔记。OneNote以其灵活的布局和强大的编辑功能而闻名,它可以帮助个人和团队记录信息、规划项目、协作和分享知识。 *笔记软件OneNote On…

Linux性能监控命令-ps

ps 命令是最常用的监控进程的命令,通过此命令可以查看系统中所有运行进程的详细信息 参数: a:显示一个终端的所有进程,除会话引线外; u:显示当前用户进程及内存的使用情况; x:显示…

Python项目——久坐提醒定时器(PySide6)编写

1、介绍 使用Python编写一个久坐提醒软件。功能: 设置工作时间。设置休息时间。选择休息时是否播放音乐。休息时,软件置顶,且不能关闭。 2、工具 语言:python3.11UI设计工具:Qt designer编译器:PyCharm包…

老子云支持70+格式模型转FBX/OBJ/STL/STP,一键处理无损转换!

老子云3D可视化平台是一个集合了3D编辑器、单模型轻量化、倾斜摄影轻量化、格式转换等一站式3D开发功能的强大技术平台。无论您是设计师、工程师还是科研人员,都可以在这个平台上轻松实现您的创意和想法。 老子云3D可视化平台是一个集合了3D编辑器、单模型轻量化、…

CAN数据记录仪解决汽车电子与工程机械冬测难点

CAN数据记录仪在汽车电子与工程机械冬测中扮演着重要的角色。在寒冷的冬季,汽车可能会因为环境温度过低而出现各种问题,例如电池电量不足、发动机启动困难等。为了确保汽车在冬季的正常运行,需要对汽车进行电子冬测。 CAN数据记录仪在冬测中发…

从临床预测模型到临床实践的三个问题探讨

从临床预测模型到临床实践的三个问题探讨 摘要: 本文就临床预测模型进入到临床实践过程中会遇到的三个问题,如何构建预测模型应用,如何确定决策阈值和如何符合伦理要求,进行了举例说明。希望通过这三个问题的探讨而使预测模型能够…

基于网络爬虫的天气数据分析

二、网络爬虫设计 网络爬虫原理 网络爬虫是一种自动化程序,用于从互联网上获取数据。其工作原理可以分为以下几个步骤: 定义起始点:网络爬虫首先需要定义一个或多个起始点(URL),从这些起始点开始抓取数据…

文本按照标点符号切分符号丢掉问题

问题:文本按照标点符号切分符号丢掉问题 项目场景:需要对一个文字段落按照标点符号切分成一个个句子,使用正则切分的过程中发现标点符号丢了, 问题描述 文本按照标点符号切分符号丢掉问题 原始代码: public static v…

LangChain输出解析器

大型语言模型(或 LLM)生成文本,当你构建应用程序时,有时需要使用结构化数据而不是字符串。 LangChain 提供了输出解析器,可以帮助我们做到这一点。 我们将回顾 LangChain 提供的 Pydantic (JSON) 解析器。 NSDT工具推…

git merge 和 git pull的区别是什么

git merge 和 git pull 都是 Git 中用于合并代码的命令,但它们的使用场景和功能略有不同。 git merge 是用于合并一个或多个分支的命令。你可以将其他分支的代码合并到当前分支中。通常用于合并开发分支或修复分支到主分支上。 具体步骤: 首先&#xff0…

常用的Qt开源库分享

1. Qwt (https://qwt.sf.net): Qwt是一个基于Qt的数据可视化库,提供了绘制曲线、图表、仪表盘等功能。 2. QJson (https://qjson.sourceforge.net): QJson是一个用于JSON数据解析和生成的库,使Qt应用程序能够方便地处理JSON格式的数据。 3. QCustomP…

超过GPT3.5?Mixtral 8*7B 模型结构分析

Datawhale干货 作者:宋志学,Datawhale成员 前言 2023年12月11日,Mistral AI团队发布了一款高质量的稀疏专家混合模型Mixtral 8x7B。 Mistral AI继续致力于向开发者社区提供最优秀的开放模型。在人工智能领域向前发展,需要采取超越…

kali下-MSF-ftp_login模块破解FTP账号及密码

一、环境准备 两台设备在同一个网络内 一台kali系统:192.168.10.128 一台winserver2016:192.168.10.132 二、MSF介绍 metasploit 全称是The Metasploit Framework,又称MSF,是Kali 内置的一款渗透测试框架,也是全球…

Discuz论坛网站登录账号操作慢,必须强制刷新才会显示登录怎么办?

飞飞发现在登录服务器大本营账号时,输入账号密码登录后还是显示的登录框,强制刷新后才知道已经登录了,每次都要刷新才能正常显示,非常影响用户体验,于是在网上找了类似的问题故障解决方法,目前问题已经解决…

部署Sqli-labs靶场:一篇文章解析全过程

部署Sqli-labs靶场:一篇文章解析全过程 0x01 前言 Sqli-labs是一个在线的SQL注入练习平台,提供了一系列关卡供用户练习SQL注入的技巧和防范方法。在这个平台上,用户可以尝试注入攻击,并测试自己的技能和工具,同时也可…

深入理解与应用Flink中的水印机制

在Apache Flink这一现代大数据处理框架中,对实时流数据的高效、准确处理是一个核心诉求。为实现这一目标,Flink引入了一种独特而强大的时间管理机制——水印(Watermark),它在处理无界流时起到了关键的作用,…