Python中常用的数据存储的方式有:pickle模块,shelve模块,MySQL数据库,MongoDB数据库,SQLite轻量数据库,Excel表格存储等等。
(1)使用pickle模块进行数据存储
pickle是标准库中的模块,与之相同的是cpickle模块,cpickle是由c语言重写之后的,与pickle完全一致的模块,比pickle快。
(1-1)pickle的数据写入
pickle使用dump(obj, file, [protocol])函数将数据写入到文件中:
- obj : 待写入的数据对象;
- file : 要写入数据的文件;
- protocol : 写入协议,默认为False或0,表示将会以ASCII格式保存对象数据,protocol=True时,表示以压缩的二进制格式保存对象数据。
执行代码之后,后生成一个pickle_tmp.dat的文件,并将数据写入到该文件中:
(1-2)pickle的数据读取
pickle模块使用load(file)函数反序列化读取文件数据。
打印结果:
(2)使用shelve模块进行数据读写
shelve也是标准库。
(2-1)shelve的数据写入
执行代码之后,可以在文件系统中看到新创建的文件shelve_tmp.db文件:
(2-2)shelve的数据读取
打印结果:
【注意】shelve模块中, 通过 s['name'] = 'hust' 这一过程,若已存在"name"键时,则上面的操作是修改原有键对应的值,若没有"name"的键,则会增加新的键值对;但要是shevle中需要存储一个键值对,值是一个列表,现在需要更新列表的内容:
打印结果:
我们发现结果并不是我们设想的那样,错误出现在shelve.open()函数上,此处需要多传入一些参数:
打印结果:
(3)MySQL数据库存储数据
在Ubuntu上,MySQL的安装为:
第一步:
代码语言:javascript复制sudo apt-get install mysql-server
第二步:
代码语言:javascript复制apt-get isntall mysql-client
第三步:
代码语言:javascript复制sudo apt-get install libmysqlclient-dev
Python中提供了MySQLdb模块,可以让Python与MySQL数据库进行交互,MySQLdb不是Python的标准库,需要额外安装:
方法一:
代码语言:javascript复制1. sudo apt-get install build-essential python-dev libmysqlclient-dev
2. sudo apt-get install python-MySQLdb
方法二:
代码语言:javascript复制pip install mysql-python
使用MySQLdb模块可以链接MySQL数据库,并与之进行交互:
通过MySQL.connect()函数获取得到MySQL数据库的链接对象,从该对象可以获得游标cursor对象,与MySQL数据库的对话,就是通过游标cursor来完成的。
数据库链接对象的常用方法:
数据库游标cursor常用方法:
(3-1)查询数据
打印结果:
【说明】游标的方法fetchone()方法每次得到当前游标所在位置上的结果集,同时会将游标移动到下一个结果集上,若要手动移动游标,则可以使用游标的nextset()方法,以及scroll()方法。
(3-2)插入数据
打印结果:
(3-3)更新数据
打印结果:
【注意】在数据库操作之后,为了节省内存,需要关闭游标对象和数据库链接对象。
(4)Mongo数据库存储数据
Mongo数据库是NoSQL数据库,Python中提供了pymongo模块来实现与Mongo数据库的交互,首先需要安装pymongo:
# 安装最新版本的pymongo模块
代码语言:javascript复制sudo pip install pymongo
# 安装指定版本的pymongo(version2.8)
代码语言:javascript复制sudo pip install pymongo==2.8
安装之后,可以使用pymongo.version来查看pymongo模块的版本:
安装之后,使用dir(pymongo)来查看pymongo中的方法和属性:
在Ubuntu上安装MongoDB:
与MongoDB进行链接:
打印结果:
【说明】上面的mydb是自己在MongoDB中建立的数据库,user是mydb数据库中的一个文档集合,数据是存储在user文档集合中的。
(4-1)查询数据
打印结果:
可以将find()获得的结果集进行排序:
打印结果:
数据集合中的find_one()函数可以查找到一条数据:
打印结果:
(4-2)增加数据
在数据集合中插入数据,调用数据集合对象的insert()进行数据的增加。
打印结果:
(4-3)更新数据
Python可以调用数据集合的update()函数进行数据的更新。
打印结果:
(4-4)删除数据
Python中调用数据集合的remove()函数删除数据:
打印结果:
(5)Microsoft Excel表格存储数据
Python中提供opnepyxl模块进行Microsoft Excel表格数据的读写,在Ubuntu系统中需要首先安装openpyxl模块:
操作Excel文件对象:
每个Excel文件的操作涉及到sheet和cell两个对象。
(5-1)sheet的创建
Python可以使用openpyxl模块中的create_sheet()方法进行sheet的创建:
(5-2)sheet对象常用的操作
打印结果:
(5-3)操作cell
在Sheet中的cell中可以存储具体的数据。
打印结果:
(5-4)其他相关操作
(5-4-1)获取cell切片集合
打印结果:(以元组的方式返回)
(5-4-2)按照行/列的方式查看sheet表格
(5-4-3)在Sheet表格中添加数据
打印结果:
(5-5)保存Excel文件
【说明】上面的操作,是将新创建的Excel表格存储在内存中操作,在结束操作之后,需要保存一下Excel表格,以便数据的持久化存储。
在命令行中,使用ls查看文件系统:
打开Excel文件,查看内容:
(5-6)读取已存在的Excel文件
打印结果:
【补充】Excel表格的处理,处理openpyxl模块之外,还可以使用xlsxwriter模块,xlrd模块,xlwt模块进行处理。
(6)SQLite数据库
SQLite是一种小型的关系型数据库,不需要服务器,零配置就可以进行数据的存储,Python标准库中的sqlite3可以用来操作SQLite数据库。
上面使用Python标准库sqlite3进行SQLite数据库的链接,执行之后可以看到在当前文件夹中生成了123.db的数据库文件,当然也可以指定文件存在/创建的路径。
(6-1)表的创建
执行之后,查看123.db数据库文件:
【说明】在Ubuntu系统下可以使用:
代码语言:javascript复制sudo apt-get install sqlitebrowser
命令来安装sqlitebrowser用于查看SQLite数据库文件,安装好之后,在123.db所在的目录中使用:
代码语言:javascript复制sqlitebrowser 123.db
命令,既可以看到上面的情况。
(6-2)数据存储
执行完上面的语句之后:
(6-3)数据查询
打印结果:
【说明】游标对象的fetchall()以列表返回所有的结果集,游标对象的fetchone()方法只返回第一个匹配到的结果集。
(6-4)批量导入数据
打印结果:
利用sqlitebrowser工具查看SQLite数据库文件123.db:
(6-5)数据更新
打印结果:
使用sqlitebrowser工具查看123.db文件:
(6-6)删除数据
打印结果:
删除成功,需要注意的是,在执行完操作之后,需要尽量关闭游标对象,数据库链接对象: