专栏首页TestQAPython又一神作,轻量级DB操作库--records

Python又一神作,轻量级DB操作库--records

使用过Python的朋友,或多或少都会涉及到关于DB的操作;底层的工具有像pymysql、MySQLdb,高级的ORM有像sqlarchemy等等。今天推荐的介于他们之间的轻量级DB库--records。

日常工作中一不小心就要操作MySQL这样的数据库,之前使用过的MySQL库包括pymysql、MySQLdb、sqlarchemy。虽然都可以使用并能满足日常的工作,但是当我遇到records之后,就开始犯起了“喜新厌旧”的老毛病了!

那么,records有哪些优点呢?首先它不像pymysql这类工具,需要直接操作游标这类对象;其次它不像sqlarchemy这样需要先写DB模型才能执行操作。那么它是怎么操作的呢?

安装

pip install records

使用

import records

db = records.Database('mysql+pymysql://username:password@localhost/dbname?charset=utf8')
rows = db.query("select * from tablename")
for row in rows:
   print(row.field1, row.field2, row.field3)

可以看到,一共只需四行代码就可以实现DB对象级的数据查询。这才是真正的为人类服务的库。忘了说了,records的作者与requests的作者正是同一个大神!!!

另外,从连接DB的参数也可以知道,records并不是只能支持mysql,它还可以支持很多其它的关系型DB,比如:RedShift, Postgres, MySQL, SQLite, Oracle, and MS-SQL等等,当然前提是底层的对应驱动库需要先安装好了!

query万物

records的世界,执行sql只有一个方法,那就是query。不管是查询、更新、删除,都只有query一个接口。其它sql命令,比如:创建表、创建DB等也是同样的接口。所以query就是execsql的代名词,query可以做任何事情。

import records

db = records.Database('mysql+pymysql://username:password@localhost/dbname?charset=utf8')
db.query("CREATE DATABASE dbname;")
db.query("USE dbname;")
db.query("SHOW DATABASES;")

结果集输出

除了在连接、查询上面体现了简洁之外,在结果集的输出上面也是令人惊艳!即可以支持索引,也可以支持切片,更可以直接进行迭代。

import records

db = records.Database('mysql+pymysql://username:password@localhost/dbname?charset=utf8')
rows = db.query("select * from tablename")
print(rows[0])
print(rows[2:4])
print(rows.all())
print(rows.first())
print(rows.one())

结果集导出

其它DB库都没有提供这样的看似很常见的功能,但是records就是有。只能用它,用它!

import records

db = records.Database('mysql+pymysql://username:password@localhost/dbname?charset=utf8')
rows = db.query("select * from tablename")
# 查看结果集
print(rows.dataset)
print(rows.export('csv'))
print(rows.export('yaml'))
print(rows.export('json'))
# Pandas DataFrame
rows.export('df')
# excel
with open('report.xls', 'wb') as f:
    f.write(rows.export('xls'))

心动了么,赶紧上手吧!

本文分享自微信公众号 - TestQA(testqna),作者:five3

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ChromeDriver与Chrome浏览器版本对应表

    http://npm.taobao.org/mirrors/chromedriver/

    上帝De助手
  • Python单元测试报告框架

    如果Python语言界已经有了HTMLTestRunner,那么为什么还要一个PyTestReport测试框架呢?

    上帝De助手
  • Python定时任务神器-APScheduler

    但是这些定时任务库都只是提供了简答的,或者只支持静态的定时任务。而对于需要复杂定时功能,或者动态注册定时任务的场景,则无法满足。

    上帝De助手
  • AI 在 marketing 上的应用

    杨熹
  • 你必须知道的Docker镜像仓库的搭建

    近期工作中发现用到的容器镜像越来越多(不多的时候没考虑过镜像仓库的问题),同一个容器镜像也存在多个版本,那么镜像仓库的搭建需求就涌现出来,本文就目前的几个常用镜...

    心莱科技雪雁
  • Python 中 Ctrl+C 不能终

    python2.x中multiprocessing提供的基于函数进程池,join后陷入内核态,按下ctrl+c不能停止所有的进程并退出。即必须ctrl+z后找到...

    用户2398817
  • 利用Hexo+coding搭建博客,优化github博客打开速度

    上次用hexo和github上搭建博客后,用了几天发现博客搭建在github上有一定的局限:

    用户2458785
  • Docker Compose集成式应用组合与服务编排

    Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。其代码目前在 https://github.com/docker/co...

    CodingDiray
  • H5仿微信支付键盘

    视频地址:https://github.com/Javen205/IJPay-Demo/blob/master/doc/pay_keyboard.m4v

    Javen
  • 一套完整的直播平台开发搭建时都需要哪些信息?

    对于直播平台如何搭建这一问题,很多时候大家可能会将直播平台开发过程也包含其中。其实,直播平台搭建是基于已经开发完成的直播系统,使之通过搭建部署能够正常运行。

    布谷安妮

扫码关注云+社区

领取腾讯云代金券