原创: 阿亮 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格式具体看下图

插入数据

对于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'))

同样可以导出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,即可免费获取。

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

  1. 操作MySQL?这个库比pymysql香一百倍

    操作MySQL,我们都习惯于用pymsq,基本流程就是 创建连接 创建游标 执行SQL 关闭连接 代码是这样的 import pymysql# 1.创建连接 conn = pymysql.connec ...

  2. mysql 导出数据字典_python 查询 MySQL 数据库并返回字典集

    1. 导入第三方库 import pymssqlimport numpy as npimport pandas as pd 2. 创建数据库连接 '''pymysql.Connect()参数说明hos ...

  3. mysql 访问速度_操作mysql第一次访问速度慢(远程)

    最近在使用java操作远程的mysql数据库的时候,第一次请求非常的慢,而且极其容易引起系统的崩溃报错连接超时 下面就这个问题来解决下把 ------------------------------- ...

  4. MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结

    MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结 一.VARCHAR存储和行长度限制 1.VARCHAR(N)中,N指的是字符的长度,VARCHAR类型最大支持65535,指的是 ...

  5. mysql导出数据字典6_MySQL利用Navicat导出数据字典

    这里算是一个小技巧 利用mysql的information_schema中的COLUMNS表 和navicat中的导出功能实现快速导出数据字典 CREATE TEMPORARYTABLE `COLUM ...

  6. 怎么升级mysql的版本_升级mysql版本的操作步骤

    升级mysql版本的操作步骤 发布时间:2020-05-15 16:06:26 来源:51CTO 阅读:120 作者:三月 本文主要给大家介绍升级mysql版本的操作步骤,文章内容都是笔者用心摘选和编 ...

  7. 分布式从mysql查数据_技术分享 | 从库数据的查找和参数 slave_rows_search_algorithms...

    作者:高鹏 文章末尾有他著作的<深入理解MySQL主从原理 32讲>,深入透彻理解MySQL主从,GTID相关技术知识. 本文节选自<深入理解MySQL主从原理>第24节 注意 ...

  8. 利用mysql数据库中_利用mysql和mysqli取得mysql的所有数据库和库中的所有表

    功能:利用mysql和mysqli两种连接数据库的方法,取得Mysql服务器上的所有数据库和库中的所有表. 环境:自己用分开安装apache mysql php搭建的环境 操作系统是:windows ...

  9. mysql binlog跟踪_在MySQL中使用init-connect与binlog来实现用户操作追踪记录

    在MySQL中使用init-connect与binlog来实现用户操作追踪记录 分类: MySQL 前言: 测试环境莫名其妙有几条重要数据被删除了,由于在binlog里面只看到是公用账号删除的,无法查 ...

最新文章

  1. Cs Round#56 D Find Path Union
  2. seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  3. git 版本控制器 初学习,工作中的问题及其解决方法
  4. JAVA中ListIterator和Iterator详解与辨析
  5. arma模型平稳性和可逆性的条件_时间序列预测模型ARIMA实现
  6. LeetCode 1755. 最接近目标值的子序列和(状态枚举 + 双指针)
  7. 表格外粗内细怎么设置_金游艇复刻机芯-N厂灰游艇价格 | 复刻表评测
  8. 44个基于SaaS的商业智能解决方案
  9. Python处理僵尸进程
  10. Python学习:使用pycharm运行py文件报错系统找不到指定的路径
  11. OSChina 周日乱弹 ——领导问:功能几天能开发完?怎么回
  12. DOM元素 DAY17
  13. Markdown语法图文详解
  14. 好友克隆自助下单网站_新进合伙人如何发朋友圈
  15. 通过youtube上传视频赚钱并免费宣传你的业务
  16. 个人永久性免费-Excel催化剂功能第85波-灵活便捷的批量发送短信功能(使用腾讯云接口)...
  17. 【DNF/YUM】如何利用iso文件建立本地软件仓库
  18. UTF-8与UTF-8(BOM)区别和一些说明
  19. 51单片机RS485远程双机多机温度采集主从机多节点蜂鸣器报警
  20. access 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配

热门文章

  1. rust怎么拆除墙壁指令_人类跌落梦境:城堡怎么过 不少玩家卡在了第六关城堡地图这里...
  2. 给排水规范大全2020_住宅电气、给排水、消防安装工程的质量通病分析
  3. mysql的exp平方_MySQL EXP()用法及代码示例
  4. 6-4 二叉树的非递归遍历 (25分)_本周小结!(二叉树)
  5. cuda矩阵相乘_cuda初学(1):稀疏矩阵向量乘法(单精度)
  6. 【matlab】画图的文字调整大小
  7. MATLAB摄像头可以运行但是打不开视频
  8. 操作系统--用户级线程与内核级线程
  9. 安卓向服务器发送List数据
  10. 【itext学习之路】--2.设置pdf的一些常用属性