Pymysql批量插入方法executemany的使用
Pymysql批量插入方法executemany的使用
运行环境 Runtime environment1234操作系统: Windos10 IDE: pycharm 2021.3.1 x64 语言: python v3.9.1模块: Pymysql
背景python使用mysql,进行大数据导入导出操作时,免不了要使用批量入库的操作。
在使用pymysql模块操作批量入库时,碰到部分使用上的问题,以此做一个简单使用笔记。
注意事项
在写sql语句时,不管字段为什么类型,占位符统一使用%s,且不能加上引号
sql=”insert into tablename (id,name) values (%s,%s)”
添加的数据的格式必须为 list[tuple(),tuple(),tuple()] 或者 tuple(tuple(),tuple(),tuple())
values=[(1,”zhangsan”),(2,”lisi”)]
or
values=((1,”zhangsan”),(2,”lisi”))
最后,再通过executemany插入
curso ...
Python爬虫:Scrapy使用adbapi提高存储数据库效率
Python爬虫:Scrapy使用adbapi提高存储数据库效率
运行环境 Runtime environment1234操作系统: Windos10 IDE: pycharm 2021.3.1 x64 语言: python v3.9.1框架: Scrapy
背景Scrapy 是一个高性能的异步采集框架,采集速度非常快,但是数据库入库受限于数据库本身的原因,一直是个瓶颈。
在某些爬虫项目下,我们需要每次执行一条插入语句,就立即调用commit方法更新数据库。
如果爬取时间太长,中途可能被迫中断,这样程序就不能执行close_spider中的commit。
但如果在insert_db中直接加入commit,又会使程序执行变得很慢。
这里就可以使用Twisted中提供的以异步方式多线程访问数据库的模块adbapi,可以显著提供程序访问数据库的效率。
要点
adbapi.ConnectionPool方法
可以创建一个数据库连接池对象,其中包括多个连接对象,每个连接对象在独立的线程中工作。
adbapi只是提供了异步访问数据库的编程框架,再其内部依然使MySQLdb这样的库 ...
数据清洗:清理字符串中存在的\xa0字符
简介
运行环境 Runtime environment123操作系统: Windos10 IDE: pycharm 2020.3.2 x64 语言: python v3.9.1
背景内容总结
统计字符串中某字符出现的次数
使用python统计一段字符串当中,某一个字符重复出现的次数。
运行环境 Runtime environment123操作系统: Windos10 IDE: pycharm 2020.3.2 x64 语言: python v3.9.1
背景近日,其他部门提出的采集需求。
需要使用到公司内部数据库某一字段的值,去目标网站进行检索。
目标网站搜索词的联想词排序情况复杂,所以需要对搜索词进行切割穷举组合,再分别拿去搜索的。
切割成多少段,是根据特定连接符号决定的,但是由于切割段数过多,穷举数量就会爆炸增长。
在此,需要统计字符串中存在多少个连接符号,来决定是穷举搜索,还是舍弃该词的搜索操作。
方法说明(str).count()
count(str[,start][,end])
12345判断字符串中,从start开始的下标到字符串的结尾end中出现了多少个str (给定字符)如果 start到end 没写 默认 从头到尾字符串中出现str出现的次数
代码1234567891011121314# 依据 & 符号切割temp_str = "Neomycin Sul ...
数据清洗:获取指定字符前面或者后面的所有字符
获取指定字符前面的所有字符,获取指定字符后面的所有字符。
关系到字符串的处理。
运行环境 Runtime environment123操作系统: Windos10 IDE: pycharm 2021.3.2 x64 语言: python v3.9.1
背景数据采集过程中,通过解析库拿到的字符串,是需要清洗的。
偶尔需要截取某特定符号后的字符串。
例如: “Tree Number(s): C15.378.100.100, C16.320.099” 获取“:”符号后的字符串。
思路采用split方法根据特定符号,将目标字符串切割,然后使用join方法再将需要的那一部分字符串取出。
但是如果目标字符串为None时,split方法会报错。
采用rfind+切片方法Python rfind() 返回字符串最后一次出现的位置,如果没有匹配项则返回 -1。
根据特定符号,查找目标字符串该符号,然后使用切片法截取需要的字符串。
1. 顺序取法(从前往后取)
2. 逆序取法(从后往前取)
代码split方法12345temp_str = "Tree Number(s): ...
简单粗暴的让mysql主键id重新排序
简单粗暴的让mysql主键id重新排序
运行环境 Runtime environment1234操作系统: Windos10 IDE: pycharm 2021.3.1 x64 语言: python v3.8框架: xxx
背景简单粗暴的让mysql主键id重新排序。
采集数据入库的时候,偶尔会出现数据入库失败,导致事务回滚的情况。
当mysql表中存在自增id字段,就会出现id断续的情况。
强迫症看着难受。
思路使用SQL语句,备份表,删除id自增键,重新创建id自增键。
解决方案
备份表结构
create table table_bak like table_name;
备份表数据
insert into table_bak select * from table_name;
删除原来主键字段(如id)
alter table table_name drop id;
添加主键,自增,放在第一位
alter table table_name add id int(11) primary key auto_increment first;
检 ...
数据清洗:通过Python从字符串中提取数字
根据业务需求进行数据清洗,通过Python从字符串中提取数字。
运行环境 Runtime environment123操作系统: Windos10 IDE: pycharm 2020.3.2 x64 语言: python v3.9.1
背景某日,根据公司业务需求采集某药品信息的网站。
获取其自定的itemID时,发现它id是一段纯数字,且塞在某个HTML标签的value参数中。
而且,无其他数字造成干扰。
于是开发了一个通用python函数方法。
思路采用正则表达式为解决需求的核心。
常用正则表达式概要12345678910111213## 总结## ^ 匹配字符串的开始。## $ 匹配字符串的结尾。## \b 匹配一个单词的边界。## \d 匹配任意数字。## \D 匹配任意非数字字符。## x? 匹配一个可选的 x 字符 (换言之,它匹配 1 次或者 0 次 x 字符)。## x* 匹配0次或者多次 x 字符。## x+ 匹配1次或者多次 x 字符。## x{n,m} 匹配 x 字符,至少 n 次,至多 m 次。## (a|b|c) 要么匹配 a,要 ...
Navicat界面下如何用SQL语句给Mysql创建表?
Navicat界面下如何用SQL语句给Mysql创建表?
运行环境 Runtime environment12操作系统: Windos10 开发工具: Navicat 15
背景由于公司建立数据仓库的业务需求,所以灵活的使用navicat进行数据库操作是不错的选择。
本文仅作为基础的使用笔记。
内容
选择一个数据库,点击“查询”,在右侧点击“创建查询”,输入SQL语句,点击“保存”即可。
选择要操作的mysql连接和数据库,输入创表的sql语句,然后点击保存。
示例创表SQL:
123456789101112CREATE TABLE `ods_cxy_adis_drug_t` ( `id` int(25) NOT NULL AUTO_INCREMENT COMMENT '自增id', `name` varchar(1024) DEFAULT NULL COMMENT '药物名称', `keyword_name` varchar(1024) DEFAULT NULL COMMENT '搜索药物名称用的关键词' ...
Git设置代理
简介
运行环境 Runtime environment12操作系统: Windos10 IDE: pycharm 2021.3.1 x64
背景入职的新公司,对github的连接速度,实在是差得令人发指。
有时候想方便在公司写一些技术总结的文章,都面临无法提交的问题。
拷贝代码或者是工具安装包都非常困难。
Github + ssr 实现代理访问由于博主使用的的ssr作为代理,默认代理端口为1080。
设置代理应用场景:不想在本地clone仓库内容来处理,而是直接操作网页完成同步操作。
http || https 设置代理
123456789101112131415161718192021 //设置全局代理 //http git config --global https.proxy http://127.0.0.1:1080 //https git config --global https.proxy https://127.0.0.1:1080 //使用socks5代理的 例如ss,ssr 1080是windows下ss的默认代理端口,mac下不同,或者有自定义的, ...
使用timeit测试Python小代码片段的执行时间
简单的测试python代码,可以采用timeit方法。
该模块提供了一种简单的方法来计算一小段 Python 代码的耗时。
它有 命令行界面 以及一个 可调用 方法。
它避免了许多用于测量执行时间的常见陷阱。
运行环境 Runtime environment123操作系统: Windos10 IDE: webStrom 2021.3.1 x64 语言: Python 3.9.1
背景开发过程中,时而需要优化运行效率,提高代码整体的质量。
代码段运行时间,是优化代码的一个直观指标。
大段的代码运行时间测试,可以采用python的装饰器特性,
但是如果是小段的代码,可以使用原生的timeit模块,来达到快速测试的目的。
代码12345678910111213141516171819202122232425262728import timeit# 测试使用三种方式进行同一种for循环的耗时对比timeit.timeit('"-".join(str(n) for n in range(100))', number=10000)# 0.3018 ...