python操作数据库之records
安装
pip install records
使用步骤:
-
连接数据库,返回 db 数据库对象
-
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