mysql 导出数据字典_操作MySQL?这个库比pymysql香一百倍

原创: 阿亮 Python极客社区

操作MySQL,我们都习惯于用pymsq,基本流程就是

  1. 创建连接
  2. 创建游标
  3. 执行SQL
  4. 关闭连接

代码是这样的

import pymysql# 1.创建连接conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root', charset='utf8')# 2.创建游标cursor = conn.cursor()# 3.执行sql语句cursor.execute('select * from user where xxx')result=cursor.execute(sql) #执行sql语句,返回sql查询成功的记录数目# 关闭连接,游标和连接都要关闭cursor.close()conn.close()


而今天要说的库,可以快速的进行查询,比pymysql好使,不再需要操作游标。即:records库,网上关于这个库的资料其实并不多。

什么?你没听过,所以不敢用?那你总知道requests库吧,其实这两个库都是同一个作者写的。

这个库不光支持MySQL,同样还只是PostgreSQL,SQLite,Oracle等..

项目地址:https://github.com/kennethreitz/records

安装 : pip install records mysqlclient

创建一个user_demo表

import records# 获取数据库连接db = records.Database('mysql+pymysql://root:root@localhost:3306/records_test')# 创建表的sqlcreate_sql = """CREATE TABLE IF NOT EXISTS user_demo ( id int(11) PRIMARY KEY AUTO_INCREMENT, name varchar(20), age int);"""# 执行db.query(create_sql)


获取数据库连接的格式是标准的url格式具体看下图

888c58592e3dd310798326daf5d84032.png

插入数据

对于records,插入单条和多条数据都比较方便,而且还支持动态加载数据。

# 获取数据库连接db = records.Database('mysql+pymysql://root:root@localhost:3306/records_test')# 插入一条数据db.query("INSERT INTO user_demo(name, age) VALUE ('tom', 19)")# 通过参数传值动态插入一条user = {'name': 'liming', 'age': 20}db.query("INSERT INTO user_demo(name, age) VALUE (:name, :age)", **user)# 插入多条users = [ {'name': '二狗子', 'age': 14}, {'name': '二柱子', 'age': 12}, {'name': '翠花', 'age': 9}]# records的bulk_query方法支持插入和更新多条数据db.bulk_query ("INSERT INTO user_demo(name, age) VALUES (:name, :age)", users)

执行之后,再查询数据库,发现都正常插入了;

mysql> select * from user_demo;+----+--------+------+| id | name | age |+----+--------+------+| 1 | tom | 19 || 2 | liming | 20 || 3 | 二狗子 | 14 || 4 | 二柱子 | 12 || 5 | 翠花 | 9 |+----+--------+------+5 rows in set (0.00 sec)

查询数据

records默认是返回封装的RecordCollection对象,当然我们也可以通过调整某些参数,获取到不一样的数据类型。

  • as_dict = True:通过字典的形式返回数据
  • as_ordereddict=True:以排序字典的形式返回数据

代码示例:

rows = db.query('select * from user_demo')# 获取全部数据print(rows.all())# 获取第一条数据print(rows.first()) # # 以字典的形式获取数据print(rows.all(as_dict=True))print(rows.first(as_dict=True))# 排序字典print(rows.first(as_ordereddict=True)) # OrderedDict([('id', 1), ('name', 'tom'), ('age', 19)])

事务

数据库事务是构成单一逻辑工作单元的操作合集,生活中最好的例子就是转账操作,A给B转账100元,先从A的账户扣除100,再给B的账户加100。如果再给B账户加100的过程程序出现异常,就会导致A莫名其妙的被扣了100。事务就是用来解决这种问题的,保证一个执行单元,要么都执行成功,要么就都不成功。

records同样也支持事务。代码如下:

with db.transaction() as t: user1 = {'name': '狗蛋', 'age': 8} user2 = {'id': 1, 'name': '锤子', 'age': 10} t.query("INSERT INTO user_demo(name, age) VALUE (:name, :age)", **user1) print("user1 已执行插入...") t.query("INSERT INTO user_demo(id,name, age) VALUE (:id,:name, :age)", **user2) print('user2 已执行插入...')

数据存中已经存在了id为1的信息,因此执行user2的时候,会导致主键冲突。 控制台输出:

user1 已执行插入...

并没有输出‘user2 已执行插入...’ 说明执行插入user2的时候出现了主键冲突(数据库中已经存在id为1的数据了)。再去查看数据库,发现并没有name为狗蛋的数据,说明这是一个数据库事务的过程。在执行user2失败的时候,将已经执行成功的user1,进行了事务回滚。

数据导出

有时候我们需要将数据库的数据进行导出,比如存成文本或者Excel。强大的records可以直接进行导出操作。

导出csv文件

rows = db.query('select * from user_demo')with open('user_demo.csv', 'wb') as f: f.write(rows.export('xlsl'))
775bb3730350006e5807e098cd06e7b8.png

同样可以导出yaml、json、xlsl、pandas、html等格式。导出方法为

rows.export('你要导出的格式')

例如导出Html格式:

rows = db.query('select * from user_demo')with open('user_demo.html', 'wb') as f: f.write(rows.export('html').encode('utf-8'))


最后,我自己是一名从事了多年开发的Python老程序员,辞职目前在做自己的Python私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的Python学习干货,可以送给每一位喜欢Python的小伙伴,想要获取的可以关注我的头条号并在后台私信我:01,即可免费获取。

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

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

相关文章

java putifabsent_java8中Map的一些骚操作总结

一 前言本篇内容是关于 map 新特性的一些方法使用上的介绍,如果有不足之处欢迎补充!!二 map新特性关于以下函数式编程的函数的计算知识追寻者都使用 简单字符串代替了,参数无非就是Key,value;2.1 forEachforEach迭代&a…

java 注解 target_详解JDK 5 Annotation 注解之@Target的用法

前言目前,越来越多的架构设计在使用注解,例如spring3.0、struts2等框架。让我们先来看看注解的定义。如下是一段使用了JDK 5 Annotation Target的代码:Target({ElementType.METHOD})Retention(RetentionPolicy.RUNTIME)InheritedDocumentedpu…

pajek软件使用方法_使用Jco远程连接SAP软件系统方法

作者:JongWill声明:本文章仅用于SAP软件的应用与学习,不代表SAP公司。(注:文中所示截图来源SAP软件,相应著作权归SAP所有。)SAP公司的ERP系统是一套成熟的套装软件,它是博大精深的,但也不是无所…

镜像浏览器_害怕win10镜像有第三方软件,直接到微软官网下载,原汁原味

很多时候我们在网上下载的一些win10镜像ISO文件都包含有一些第三方的软件,虽然这都是网站为了盈利而不得不做的,但是辛苦下载安装好的windows系统,如果有乱七八糟的软件心里真的会非常不舒服,甚至以前电脑城的win7所谓正版光碟都是…

post大小限制_作为一个程序员,面试中常问的get和post的区别,你真的知道吗

作为一个程序员无论是搞前端的还是搞后端的,只要问起来GET和POST的区别,都能说出来个一二三四来。你可能自己写过无数个GET和POST请求,或者也看过很多权威网站总结出来的区别,你非常清楚的知道什么时候用GET什么时候用POST.当你在…

java static 修饰变量吗_Java面试 - static 修饰的变量和方法有哪些特点?

1、static修饰的变量和方法,在类加载时即被初始化,可直接通过类名.变量名和类型.方法名进行调用。2、static修饰的变量,在类加载时会被分配到数据区的方法区。类的实例可共享方法区中的变量。如果static修饰的变量发生改变,那么所…

安卓手机如何防盗_如何设置安卓手机各版本USB调试模式

关注我们,获得更多资讯在这篇教学中,小蛙会详细向大家讲解USB调试模式的开启及关闭方法,以及其用途。在这个过程中,由于Android 机型众多,所以无办法列举太多。但请相信小蛙,开启USB 调试的操作方法基本上是…

iphone同步助手_iPhone 与安卓手机之间如何进行资料迁移

​上一期我们介绍了 iPhone 之间和安卓手机之间如何备份和进行资料迁移,很多朋友都留言说想知道 iPhone 与安卓手机之间如何进行资料迁移,看来双十一大家都剁手换了手机啊,嘴上说着不要,到头来还是管不住自己的手。同操作系统的手…

当前记录集不支持更新_不断中招的你还放心升级win10吗?wi10近期更新问题及解决办法...

.专于心 精于形.Win10用户升级5月更新后屏幕出现蓝绿伪影:或跟调节色温软件有关随着五月更新升级范围的扩大,一些问题也是加速展现在微软面前。现在,有不少Windows 10用户反馈称,自己升级至五月更新后,屏幕出现了蓝绿伪…

易班自动答题脚本_如何使用python进行自动网上考试

前言文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。作者: HIS HackerPS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun背景说明在github上发现一…

两个子集pom互相调用_声明式服务调用组件Feign

什么是Feign? Feign是SpringCloud组件中的一个轻量级RESTful的HTTP服务客户端。Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。什么是OpenFeign?OpenFeign是SpringCloud在Feign的基础上支持了SpringMVC的…

安卓手机主题软件_安卓手机安装不了软件原因和方法

安卓手机不能安装软件其实有很多的原因,排除可以避免的原因(google授权),其他的硬件设施的支持,也可能出现软件不能安装的现象。有的是可以解决的,但有的是强制性原因,那就没有办法了。下面就来分析下软件不能安装的几…

excel插入页码_Excel里毫不起眼的页眉页脚,居然有这3种高能用法!

点击上方蓝字关注星标★不迷路本文作者:小敏本文编辑:小叮一说到页眉页脚,你脑海中出现的,是不是这样一个画面?规规矩矩的页眉页脚,比如,公司 logo 或者文件名称放在页眉位置,底部加…

前端怎么获取cookie的值_京东购物小程序cookie方案实践(附Demo)

一、前言早期为了解决“会话保持”的需求,社区中出现了「cookie 方案」并最终成为 W3C 标准:当某个网站登录成功后,客户端(浏览器)收到一个 cookie 标识(文本)并保存下来,在后续请求中会自动带上这个字段,由此 Web 后台…

R 语言怎么保存工作目录到当前路径_【R语言基础】01.R语言软件环境搭建及常用操作...

一、R语言简介R语言是专业的统计分析软件,来自著名数据科学网站(http://www.kdnuggets.com/)发起的一个2019年统计分析和数据挖掘软件使用情况的调查结果:表明R语言是该领域近年来最受欢迎的软件之一。R语言的优势:(1)…

ssm java上传图片预览_ssm文件上传_上传图片

1、搭建好ssm框架2、导入文件上传所需依赖commons-fileuploadcommons-fileupload1.4commons-iocommons-io2.6commons-langcommons-lang2.63、springmvc的xml文件中配置文件所需的类4、jsp界面对应其次第二个文件上传对应的就是第二个div里面的内容4、form表单配置注意&#xff…

平台允许同时在线人数 显示_12万人同时在线,游戏未正式发售,国产“糖豆人”已诞生?...

《派对动物》目前在Steam平台上开启了试玩阶段,游戏离正式发行还有一段时间。这款游戏适合多人作战,正如它的名字一样《派对动物》。不过从游戏角色的形象设定上来看,有一些像学龄前儿童喜爱的动画片,因此并没有人给这部游戏太多的…

feign post 传递空值_听我讲完GET、POST原理,面试官给我倒了杯卡布奇诺

文章来源:听我讲完GET、POST原理,面试官给我倒了杯卡布奇诺原文作者:陈哈哈来源平台:CSDN我有一个老朋友,我们叫他熊猫。发际线及将触碰到后脑勺,大框金丝眼镜也掩盖不住那黝黑的眼圈,显得格外的…

java必知必会_Java构造器必知必会

在面向对象编程中,编程人员应该在意“资源”。比如String hello "hello";在代码中,我们很在意在内存中String类型的hello,它是有一个生命周期的。在它生命周期中,初始化(initialization)和清理(cleanup)是两…

post 请求 argument type mismatch_Flask-RESTful 请求解析

一、基本参数from flask.ext.restful import reqparseparser reqparse.RequestParser()parser.add_argument(rate, typeint, helpRate cannot be converted)parser.add_argument(name, typestr)args parser.parse_args()二、必需的参数parser.add_argument(name, typestr, re…