-----------更新日志 16.7.29-------------

(该记录对应文章《豆瓣电影Top250基本信息抓取  》)

折腾了将近两天才把mysql数据库功能给实现了。

经过这两天的实践,发现了自己的很多知识点漏洞。尤其是数据编码类型。每次要想实现把数据存入txt或其他文本文件,都要花费好长时间,虽然大致实现思路很清晰,但是总是会遇到很多细枝末节的障碍,基础不牢啊。

说说从昨天到现在一直折腾pymysql的经历吧。(脑袋很混乱。估计下文会更紊乱。。。。)。不过如果你能坚持看完,绝对会有收获,没有的话你来找我(反正你也找不到)


  • BUG 1

首先是最简单的pymysql.connect()语句的实现就耗了我大半天的时间。

  1. db = pymysql.connect(host="localhost",user="root",password="123456",db="doubanmovie",charset="utf8") 

就是这么简单的一行代码。。。简直蠢哭了
我一直以为 user 和 password 两项是随便填的。。随便。。填。。的。。。
所以我付出了惨痛代价,mysql软件安装了三四次,电脑重启无数次。。。最后才慢慢悟出了真理,原来他们是我在安装mysql的时候自己设置的。
另外我要提醒一下小伙伴们,如果你安装mysql只是为了学习的话,建议密码不要太复杂,否则你会后悔的,相信我,恩。


  • BUG 2
    第二个遇到的障碍就是数据库和数据表的创建。

  1. db = pymysql.connect(host="localhost",user="root",password="123456",db="doubanmovie",charset="utf8") 

上面这行代码中申明了数据库是doubanmovie,能这么写的前提是你已经提前创建了这个名为doubanmovie的数据库,否则。。。崩。。报错,别问我是怎么知道的。

好了,数据库的创建问题已经解决,那么接下来就是数据表的创建了。代码很简单,我轻轻松松的就写出来了(傲娇脸)

  1. cursor.execute("create table movie(name text, star text, quote text, info text)")  

但就是这么简单的语句也有很多坑。这并不是说这个语句有错,而是它对后面程序的调试很麻烦。因为这个语句执行一次后,如果再执行显然就会报错。你问为什么?因为已经存在名为movie的数据表了啊。所以我为了测试数据,就得反反复复的把这个语句注释掉。

后来google,百度查了一下,得到了下面的解决办法,加上"if not exists"就可以啦。代码如下:

  1. cursor.execute("create table if not exists movie(name text, star text, quote text, info text)")  

具体为什么就不解释了,实在不明白就百度翻译一下,因为太显而易见了~~~

  • BUG 3

第三个bug就是数据插入操作。
这是浪费时间最长的过程,中途差点想放弃了,不过幸好坚持住了~~
具体的原因牵扯到代码,源头很长就不解释了,不过有兴趣的可以看看代码。

值得一提的是在这个过程中学到了一个很棒的用法(在牛人看来肯定很一般,但是这个办法确实解决了我的问题)。

就是插入语句,我们都知道插入语句是

  1. insert into 表名(变量名 数据类型) values(......); 

我要插入的内容存放在字典中,所以最开始的办法超级原始,但不知道为什么就是不行(明明逻辑是对的).废话不多说看栗子:

假如我的数据存放在movies列表(list)里,数据存放在字典(dict)里

  1. movies = [ 



  2. "name":"肖申克的救赎", 

  3. "star":"9.6", 

  4. "info":"电影介绍", 

  5. "quote":"电影名句" 

  6. }, 



  7. .... 





数据处理,执行插入操作
为行文方便,代码有所简略

  1. db = pymysql.connect(host="localhost",user="root",password="123456",db="doubanmovie",charset="utf8") 


  2. cursor = db.cursor() 

  3. for movie in sort_movies: 

  4. star = movie["star"] 

  5. name = movie["name"] 

  6. info = movie["info"] 

  7. quote = movie["quote"] 

  8. sql = "insert into movie(star,name,info,quote) values('%s', '%s', '%s', '%s');" % (star, name, info, quote) 

  9. try: 

  10. cursor.execute(sql) 

  11. db.commit() 

  12. print("数据插入成功\n*************\n") 

  13. except Exception as e: 

  14. raise e 

  15. db.close()  

以前的原始方法是

  1. sql = "insert into movie(star,name,info,quote) values(" + r'"' + star + r'","' + name + r'","'+ info + r'","'+ quote + r'",")'  

经查stackoverflow,得到如下解决办法(上面代码中已呈现)

  1. 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

还有得记得加上这行代码

  1. db.commit() 



往后版本希望扩展的功能:

  • 将数据项增加“年份”,即电影的上映年份

  • 电影数据分析

    • 评分情况

    • 前100名中各国家所占比例

    • 各种电影类型所占比例

  • 可视化数据

干巴爹!!!!!


当然如果有什么可以完善的也欢迎大家提出修改意见,希望与大家一起学习,进步

大家也可以在我的博客中给我留言哈,很高兴能和大家交流沟通

pymysql使用心得记录的更多相关文章

  1. 会议管理心得记录(非markdown版)

    前提 本文说的会议特指有开发团队成员参与的会议, 包括但不限于开发.设计.测试.运维.管理岗位的成员. 因为不同工种和行业都有其特殊性,我是一名程序员,并不太了解其他工种和行业的具体情况,不敢妄言. ...

  2. ANE接入平台心得记录(安卓)

    开发环境:FlashBuilder4.7 AIR13.0 Eclipse 由于我懒得陪安卓的开发环境所以我下载了包含安卓SDK Manager的Eclipse,其实直接用FlashBuilder开发A ...

  3. iOS关于TableViewController和CollectionViewController中self.view心得记录

    之前写代码,不喜欢记录,导致很多做过的功能,时间久了都遗忘了. 以后要勤记录~~~ 一丶首先说一下TableViewController 大家都知道,如果直接创建一个继承于TableViewContr ...

  4. fiddler使用心得记录

    fiddler是一款非常好用的软件,通过监听8888端口来修改http,https等请求和响应,是抓包神器. 最近正在学习如何使用,现在记录下学习的一些技巧 如何支持https 点击菜单项tools, ...

  5. sqlserver 2008 R2 安装教程(心得记录)

    在这里简单的记录下自己安装sqlserver的过程吧(本人以前安装失败过,然后卸载了,就一直没用,现在由于工具原因,重新安装,过程相对第一次安装会复杂点) 1.首先,把以前安装的注册表的对应c盘的文件 ...

  6. java Clone 的心得记录

    我看有些类并没有实现Cloneable接口,这种情况下调用clone()方法也不try catch也不throws: 但是如果我自己这样搞,也不实现Cloneable,接口,直接调用clone()方法 ...

  7. SpringBoot使用的心得记录

    security配置 import com.yineng.corpsysland.security.*; import com.yineng.corpsysland.web.filter.Author ...

  8. C# addin 开发心得记录

    1.环境 2012 新建项目-2010外接程序 2.新建项-功能区  创建菜单等 发布: 1.InstallShield  2015 2.打包 说明按地址-https://msdn.microsoft ...

  9. 学习心得记录:[一]sql安装与配置

    时间:2015年9月13日 02:43:09 科目:mysql的安装 笔记: 准备: 1.首先下载解压版的mysql 2.将下载好的文件放到c:\Program Files\MYSQL下(mysql文 ...

随机推荐

  1. 扩展jquery插件的方法

    方法1.通过一个简单的.jQuery函数prototype属性的别名(jquery.fn进行扩展) jQuery.fn.newStuff = function(){ console.log(" ...

  2. iOS8中 UITableView section 分区头部视图不显示

    最近自己使用了UITableView写了一个通讯录,但是在编写过程还算顺利,但是后来测试的时候,发现在iOS8中TableView的分区头不能正常显示,使用 - (NSString *)tableVi ...

  3. 属性——AddComponentMenu

    字面理解:添加 组件选项菜单 分析:可能是添加一个脚本或者组件到一个物体上 验证: 新建一个脚本:AttributeTest 提示:添加一个组件菜单属性,允许你放一个脚本在Compoent菜单下,来代 ...

  4. 11g默认审计选项

    [注:参考了maclean的网文]11g默认审计选项AUDIT_TRAIL参数的缺省值为DB,审计数据记录在数据库中的AUD$审计字典基表上.在11g中CREATE SESSION将被作为受审计的权限 ...

  5. 负笈前行--DPDK代码风格

    每个公司都会有自己代码风格或者编程规范,都旨在防范编程语言的一些陷阱或者提高代码效率,还有就是保持一致编码风格来提高代码可读性,方便code review: 或者说代码的一种美学,比如python也就 ...

  6. GET和POST的区别,何时使用POST?

     GET:一般用于信息获取,使用URL传递参数,对所发送信息的数量也有限制,一般在2000个字符     POST:一般用于修改服务器上的资源,对所发送的信息没有限制.     GET方式需要使用Re ...

  7. JAVA对特殊的字符串进行html编码

    SourceURL:about:blank /** * Created by Administrator on 2016/9/22. */public class HtmlEncode { publi ...

  8. 关于ImageLoader的一些东西

    网络图片异步加载 其实有关图片加载存在这样一个问题,图片的下载始终是一个耗时的操作,这个时候如果把图片加载放在主线程中话的是不明智的,模拟一个这样的场景, 假如在一个listview或Recycler ...

  9. [数据挖掘] - 聚类算法:K-means算法理解及SparkCore实现

    聚类算法是机器学习中的一大重要算法,也是我们掌握机器学习的必须算法,下面对聚类算法中的K-means算法做一个简单的描述: 一.概述 K-means算法属于聚类算法中的直接聚类算法.给定一个对象(或记 ...

  10. failed (1113: No mapping for the Unicode character exists in the target multi-byte code page), client: 127.0.0.1...

    nginx部署网站后,访问域名,网页显示  500 Internal Server Error ,经查看发现nginx的error.log中有报错: failed (1113: No mapping ...