python操作数据库之records

安装

pip install  records

 

使用步骤:

  1. 连接数据库,返回 db 数据库对象

  2. db 对象执行 sql 语句

import records

db = records.Database('mysql+pymysql://root:python#2019@xxx.xxx.xxx.xxx/laowang')

rows = db.query("select * from class;")

获取数据库的格式是标准的 URL 格式,如果使用的不是 mysql 数据库,只需要换掉数据库类型就可以了

格式:数据库类型+dbapi://数据库账号:数据库密码@数据库主机:端口/数据库名称

 

创建表

# sql_create_table = "create table weibo(name  varchar(20),age int);"

# db.query(sql_create_table)

 

插入一条数据

records 支持使用 :variable 定义变量,通过参数传入完成动态传值,在需要动态加载数据的时候非常有用:

# user = {"name":"zhangsan","age":12}

# db.query("insert into weibo(name,age) values(:name,:age)",**user)

 

插入多条数据

sql 语句在执行多条数据操作的时候非常不方便,尤其是当值还是变化的时候。 records 提供的bulk_query 方法能快捷的插入和更新多条数据

users = [
    {"name":"yuze", "age": 13},
    {"name":"yuze2", "age": 15},
    {"name":"yuze3", "age": 16}
]
db.bulk_query('INSERT INTO weibo(name,age) values (:name, :age)', users)

  

查询

查询到数据以后,可以通过 all()方法获取所有的记录,支持 3 种类型。

  • 默认是自己封装的 RecordCollection 对象,
  • 也可以通过 as_dict=True 参数转成字典形式,
  • 可以通过 as_ordereddict=True 转成有序字典形式

 

rows = db.query("select * from weibo;")

# 得到所有数据
print(rows.all())  =====> [<Record {"name": "zhangsan", "age": 12}>]

字典形式展示
print(rows.all(as_dict=True)) ====> [{'name': 'zhangsan', 'age': 12}]


获取第一个
print(rows.first()) 

以字典形式获取第一个
print(rows.first(as_dict=True))

  

数据导出

records支持将数据导出为多种文件格式

数据导出为json格式

rows = db.query("select * from weibo1;")

json_rows = rows.export('json')

print(json_rows)

 

数据导出为excel

xls, xlsx, dbf, ods这类二进制数据,可以直接保存成文件

rows = db.query('SELECT * FROM weibo1;')
with open('users.xls', 'wb') as f:
    f.write(rows.export('xls'))


需要安装两个包,xlrd,xlwt 

 

数据导出为tsv格式

rows = db.query("select * from weibo1;")

json_rows = rows.export('tsv')

print(json_rows)


输出结果:
name	age
yuze    13
yuze2	15
yuze3	16

  

数据导出为csv格式

rows = db.query("select * from weibo1;")

json_rows = rows.export('csv')

print(json_rows)


输出结果:
name,age
yuze,13
yuze2,15
yuze3,16

 

在Records类中,内置了一个dataset属性,用来生成一个tablib的Dataset对象,也提供了一个export方法,可以将Dataset对象转化为我们所需要的格式:

rows = db.query("select * from weibo1;")

print(rows.dataset)


输出结果:
name |age
-----|---
yuze |13 
yuze2|15 
yuze3|16 

  

 

posted @ 2021-09-08 11:37  羊脂玉净瓶  阅读(793)  评论(0)    收藏  举报