pymysql使用心得记录
-----------更新日志 16.7.29-------------
(该记录对应文章《豆瓣电影Top250基本信息抓取 》)
折腾了将近两天才把mysql数据库功能给实现了。
经过这两天的实践,发现了自己的很多知识点漏洞。尤其是数据编码类型。每次要想实现把数据存入txt或其他文本文件,都要花费好长时间,虽然大致实现思路很清晰,但是总是会遇到很多细枝末节的障碍,基础不牢啊。
说说从昨天到现在一直折腾pymysql的经历吧。(脑袋很混乱。估计下文会更紊乱。。。。)。不过如果你能坚持看完,绝对会有收获,没有的话你来找我(反正你也找不到)
BUG 1
首先是最简单的pymysql.connect()语句的实现就耗了我大半天的时间。
- db = pymysql.connect(host="localhost",user="root",password="123456",db="doubanmovie",charset="utf8")
就是这么简单的一行代码。。。简直蠢哭了
我一直以为 user 和 password 两项是随便填的。。随便。。填。。的。。。
所以我付出了惨痛代价,mysql软件安装了三四次,电脑重启无数次。。。最后才慢慢悟出了真理,原来他们是我在安装mysql的时候自己设置的。
另外我要提醒一下小伙伴们,如果你安装mysql只是为了学习的话,建议密码不要太复杂,否则你会后悔的,相信我,恩。
BUG 2
第二个遇到的障碍就是数据库和数据表的创建。
- db = pymysql.connect(host="localhost",user="root",password="123456",db="doubanmovie",charset="utf8")
上面这行代码中申明了数据库是doubanmovie,能这么写的前提是你已经提前创建了这个名为doubanmovie的数据库,否则。。。崩。。报错,别问我是怎么知道的。
好了,数据库的创建问题已经解决,那么接下来就是数据表的创建了。代码很简单,我轻轻松松的就写出来了(傲娇脸)
- cursor.execute("create table movie(name text, star text, quote text, info text)")
但就是这么简单的语句也有很多坑。这并不是说这个语句有错,而是它对后面程序的调试很麻烦。因为这个语句执行一次后,如果再执行显然就会报错。你问为什么?因为已经存在名为movie的数据表了啊。所以我为了测试数据,就得反反复复的把这个语句注释掉。
后来google,百度查了一下,得到了下面的解决办法,加上"if not exists"就可以啦。代码如下:
- cursor.execute("create table if not exists movie(name text, star text, quote text, info text)")
具体为什么就不解释了,实在不明白就百度翻译一下,因为太显而易见了~~~
BUG 3
第三个bug就是数据插入操作。
这是浪费时间最长的过程,中途差点想放弃了,不过幸好坚持住了~~
具体的原因牵扯到代码,源头很长就不解释了,不过有兴趣的可以看看代码。
值得一提的是在这个过程中学到了一个很棒的用法(在牛人看来肯定很一般,但是这个办法确实解决了我的问题)。
就是插入语句,我们都知道插入语句是
- insert into 表名(变量名 数据类型) values(......);
我要插入的内容存放在字典中,所以最开始的办法超级原始,但不知道为什么就是不行(明明逻辑是对的).废话不多说看栗子:
假如我的数据存放在movies列表(list)里,数据存放在字典(dict)里
- movies = [
- {
- "name":"肖申克的救赎",
- "star":"9.6",
- "info":"电影介绍",
- "quote":"电影名句"
- },
- {
- ....
- }
- ]
数据处理,执行插入操作
为行文方便,代码有所简略
- db = pymysql.connect(host="localhost",user="root",password="123456",db="doubanmovie",charset="utf8")
- cursor = db.cursor()
- for movie in sort_movies:
- star = movie["star"]
- name = movie["name"]
- info = movie["info"]
- quote = movie["quote"]
- sql = "insert into movie(star,name,info,quote) values('%s', '%s', '%s', '%s');" % (star, name, info, quote)
- try:
- cursor.execute(sql)
- db.commit()
- print("数据插入成功\n*************\n")
- except Exception as e:
- raise e
- db.close()
以前的原始方法是
- sql = "insert into movie(star,name,info,quote) values(" + r'"' + star + r'","' + name + r'","'+ info + r'","'+ quote + r'",")'
经查stackoverflow,得到如下解决办法(上面代码中已呈现)
- sql = "insert into movie(star,name,info,quote) values('%s', '%s', '%s', '%s');" % (star, name, info, quote)
这个可以很好的生成mysql执行语句。
stackoverflow的回答中有的人建议把上面代码中的 % 改为 ,,具体啥原因参见stackoverflow Python MySQL Statement returning Error
还有得记得加上这行代码
- db.commit()
往后版本希望扩展的功能:
将数据项增加“年份”,即电影的上映年份
电影数据分析
评分情况
前100名中各国家所占比例
各种电影类型所占比例
可视化数据
干巴爹!!!!!
当然如果有什么可以完善的也欢迎大家提出修改意见,希望与大家一起学习,进步
大家也可以在我的博客中给我留言哈,很高兴能和大家交流沟通
pymysql使用心得记录的更多相关文章
- 会议管理心得记录(非markdown版)
前提 本文说的会议特指有开发团队成员参与的会议, 包括但不限于开发.设计.测试.运维.管理岗位的成员. 因为不同工种和行业都有其特殊性,我是一名程序员,并不太了解其他工种和行业的具体情况,不敢妄言. ...
- ANE接入平台心得记录(安卓)
开发环境:FlashBuilder4.7 AIR13.0 Eclipse 由于我懒得陪安卓的开发环境所以我下载了包含安卓SDK Manager的Eclipse,其实直接用FlashBuilder开发A ...
- iOS关于TableViewController和CollectionViewController中self.view心得记录
之前写代码,不喜欢记录,导致很多做过的功能,时间久了都遗忘了. 以后要勤记录~~~ 一丶首先说一下TableViewController 大家都知道,如果直接创建一个继承于TableViewContr ...
- fiddler使用心得记录
fiddler是一款非常好用的软件,通过监听8888端口来修改http,https等请求和响应,是抓包神器. 最近正在学习如何使用,现在记录下学习的一些技巧 如何支持https 点击菜单项tools, ...
- sqlserver 2008 R2 安装教程(心得记录)
在这里简单的记录下自己安装sqlserver的过程吧(本人以前安装失败过,然后卸载了,就一直没用,现在由于工具原因,重新安装,过程相对第一次安装会复杂点) 1.首先,把以前安装的注册表的对应c盘的文件 ...
- java Clone 的心得记录
我看有些类并没有实现Cloneable接口,这种情况下调用clone()方法也不try catch也不throws: 但是如果我自己这样搞,也不实现Cloneable,接口,直接调用clone()方法 ...
- SpringBoot使用的心得记录
security配置 import com.yineng.corpsysland.security.*; import com.yineng.corpsysland.web.filter.Author ...
- C# addin 开发心得记录
1.环境 2012 新建项目-2010外接程序 2.新建项-功能区 创建菜单等 发布: 1.InstallShield 2015 2.打包 说明按地址-https://msdn.microsoft ...
- 学习心得记录:[一]sql安装与配置
时间:2015年9月13日 02:43:09 科目:mysql的安装 笔记: 准备: 1.首先下载解压版的mysql 2.将下载好的文件放到c:\Program Files\MYSQL下(mysql文 ...
随机推荐
- javascript运行机制详解: 再谈Event Loop(转)
作者: 阮一峰 日期: 2014年10月 8日 一年前,我写了一篇<什么是 Event Loop?>,谈了我对Event Loop的理解. 上个月,我偶然看到了Philip Roberts ...
- TCP/IP协议族(三) 数字签名与HTTPS详解
前面几篇博客聊了HTTP的相关东西,今天就来聊一聊HTTPS的东西.因为HTTP协议本身存在着明文传输.不能很好的验证通信方的身份和无法验证报文的完整性等一些安全方面的确点,所以才有了HTTPS的缺陷 ...
- React实例----一个表单验证比较复杂的页面
前言:这阵子看了两本CSS的书~对于CSS层叠,定位,继承等机制基本上都了解了,就想着自己写几个页面~正好自己就写了写CSS样式,然后用React渲染出来~ 闲话不多说,简单说一说这个页面,希望能对大 ...
- MINA、Netty、Twisted一起学(十一):SSL/TLS
什么是SSL/TLS 不使用SSL/TLS的网络通信,一般都是明文传输,网络传输内容在传输过程中很容易被窃听甚至篡改,非常不安全.SSL/TLS协议就是为了解决这些安全问题而设计的.SSL/TLS协议 ...
- [故障公告] 13:52-14:03,访问量突增,博客web服务器CPU 100%
13:52-14:03,由于访问量突增,博客web服务器全线CPU 100%,造成博客站点不正常访问,由此给您带来麻烦,请您谅解. 为了迎接访问量的增长给web服务器CPU带来的巨大压力,上周我们已经 ...
- 模拟做饭系统(java+线程中的join方法)
(一)项目框架分析 妈妈要去做饭,发现没有酱油,让儿子去买酱油,然后回来做饭. 根据面向对象的思想,有两个对象,妈妈和儿子 主要有两个方法: (一)没有线程控制(即儿子没有买酱油回来妈妈就做好饭了)+ ...
- 关于zepto在chrome中触发两次的解决方案
复现条件:chrome 55+ 1.zepto tap的实现及double fire的原因 在监听DOM根节点的时候,touchStart后通过XY的坐标偏差,与tapTime的计时判断Tap/Lon ...
- Centos7 安装 zabbix3.2
简介: Zabbix的一个很优秀的分布式监控服务器, 它有两部分组成: 1. “zabbix-server”用来收集并且在web端展示数据 2. “zabbix-agent”用来采集数据,发送给ser ...
- mybatis系列笔记(4)---输入输出映射
输入输出映射 通过parameterType制定输入参数类型 类型可以是简单类型(int String)也可以是POJO本身 或者包装类 1输入映射 关于输入简单类型和pojo本身的我就不写了,因为比 ...
- Android网络编程要学的东西与Http协议学习
本节引言: 本节开始我们来学习Android网络编程相关的一些东西:Android端网络编程是要干嘛?http协议的学习,使用自带扣脚Json解析类解析Json,XML解析常用的几种方式,HttpUr ...