pyhton实战之pymysql初识

关键字:入手pymysql,增删改查,日期格式化,基金数据入库

        通过前面几篇博客,我们已经能简单的得到基金网站的一些信息,那么我们接下来的工作就是将抓取到的数据存入数据库。因此我们在本篇博客中主要是穿插记录一下在python中的数据库操作。

        数据库是实际开发中必定会用到的模块,相比较oracle、sqlserver而言,mysql不仅免费而且方便易用,因此本系列选择mysql作为我们的数据库。在python3+版本之后,一般使用的是pymysql三方库。照旧奉上pymysql官方文档地址:Welcome to PyMySQL’s documentation! — PyMySQL 0.7.2 documentation

        使用pycharm编辑器(有智能编辑器生活更美好)在虚拟环境中安装好pymysql,如下图

pymysql主要掌握两个对象,一个是connection对象,一个是Cursor对象。顾名思义,connection对象是连接对象,在官方介绍中他有很多参数,但是很明显我们没必要一下子上来就把所有的参数都看个明白,只需知道几个重要的参数就行,比如host,user,password,db,charset等,Cursor对象是游标。主要有四种,如下,先做个总结,后面会有具体实例来观察他们各自有什么不同。

                Cursor                 默认,查询返回list或tuple

                DictCursor          查询返回dict,包含字段名

                SSCursor            效果同Cursor。 无缓存游标

                SSDictCursor      效果通DictCursor 。无缓存游标

        简单了解一下理论知识之后,我们来具体操练一下。下面是本地数据test的products表中的数据

           我们先从最简单的开始,把上述表中数据打印到控制台。我们第一步必须先连接上数据库,看如下代码:

                connection =pymysql.connect(**dbconfig)

    是的,只需要一行代码就可以连上mysql数据库了,我们来看看connect方法:

点进去,Connect方法
点进Connection方法

至此我们看到,原来我们最终调用的是初始化init方法,可传入可变长参数和关键字参数。我们调用pymysql.connect(**dbconfig)来获取数据库连接对象,只需要传入一个配置参数就可以了。

让我们看看dbconfig在哪里定义了?

获取了连接对象之后,下一步就是获取游标对象。上面提到了,一共有四种游标对象,我们来先获取一下默认的Cursor游标对象,然后进行查询数据:

只需要导入pymysql.cursors中的Cursor对象,然后传入connection对象即可获取默认游标对象。请注意一下当前使用默认游标对象返回的查询结果,没错,他是元组中包含元组,且没有返回数据库字段的,仅仅是值。

我们如果使用DictCursor,如下

返回的结果是list,里面的元素是字典,不仅返回了值,也返回了字段。

那么Cursor与SSCursor,DictCursor与SSDictCursor这两组游标对象有什么区别呢?

其实在上面已经给出了答案:Cursor是缓存的,SSCursor是没有缓存过的,后面一组同理。用大白话就是如果表中有几千万条数据,你使用Cursor,fetchall方法会有爆内存的风险,因为查询的结果缓存在了内存中,但是SSCursor不一样,他又叫流式游标,实际上没有缓存下来任何数据,它不会读取所有所有到内存中,它的做法是从储存块中读取记录,并且一条一条返回给你。

具体使用如下:

关于sql中的参数问题:

如果此时我们要查询出p_id为2的数据,此时除了使用拼接sql的方式(有sql注入的风险),官方文档还告诉我们又别的方式来实现,我们查看一下官方文档,

第一个参数是sql语句,第二个参数可以是元组,list或者字典。我们分别使用两个例子来操练一下:

使用元组:cursor.execute("select * from products where p_id=%s",(2,))

使用list:cursor.execute("select * from products where p_id=%s",[2])

使用字典:cursor.execute("select * from products where p_id=%(p_id)s",{"p_id":2})

是不是很类似java中预编译?以上三种都可以返回正确的结果。

查询基本了解之后我们看下如果新增记录?

插入单条记录很简单,参照上面关于参数的知识,我们很容易就可以写出如下sql:

cursor.execute("insert into products (p_name) VALUES (%s)",["测试1"])

如果我们要插入多条记录呢?同理,根据官方文档,我们可以调用executemany方法:

cursor.executemany("insert into products (p_name) VALUES (%s)",(("测试1",),("测试2",),("测试3",)))

cursor.executemany("insert into products (p_name) VALUES (%(p_name)s)",[{"p_name":"测试1"},{"p_name":"测试2"},{"p_name":"测试3"}])

是不是炒鸡简单,哈哈!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,277评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,689评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,624评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,356评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,402评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,292评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,135评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,992评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,429评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,636评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,785评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,492评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,092评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,723评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,858评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,891评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,713评论 2 354

推荐阅读更多精彩内容

  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,218评论 4 16
  • oracle存储过程常用技巧 我们在进行pl/sql编程时打交道最多的就是存储过程了。存储过程的结构是非常的简单的...
    dertch阅读 3,493评论 1 12
  • SQL SELECT 语句 一、查询SQL SELECT 语法 (1)SELECT 列名称 FROM 表名称 (2...
    有钱且幸福阅读 5,445评论 0 33
  • 感恩妹妹主动走出去,大力拜访服务客户,猛烈的随喜她的精进,祈愿她的目标早日开花结果! 感恩薛总打电话给我,讲述了一...
    A曼均阅读 170评论 0 0
  • 产品背景: 一个职业类资格考试平台,通过视频课程、考前辅导、真题模拟来帮助需要参加考试的人员能够顺利的通过...
    Sam蜀黍阅读 233评论 1 3