学习笔记,有错必纠


数据库

数据库是一个有组织的用于存储数据的文件,许多数据库都像字典一样组织数据,因为它也将键映射到值上,数据库和字典之间最大的区别是数据库是保存在磁盘上的(或者其他永久存储上),所以当程序结束时它也能持续存在

  • dbm模块

模块dbm提供了接口用于创建和更新数据库文件。

import dbm
db = dbm.open('testdatabase', 'c')

dbm.open方法中,若把参数设置为"c",则意味着如果数据库不存在,则创建该数据库。该方法会返回一个数据库对象。

当创建一个新项时,dbm会更新数据库文件,当访问数据库中的一项时,dbm会读取文件:

In [41]: import dbm...: ...: db = dbm.open('testdatabase', 'c')...: db['Bunny.png'] = 'Photo of Huang.'...: print(db['Bunny.png'])
b'Photo of Huang.'

我们看到,输出的结果以b开头,是一个字节序列。

如果对一个已经存在的键赋值,dbm会替换旧值:

In [42]: db['Bunny.png'] = 'Photo of Xiao Huang.'...: print(db['Bunny.png'])
b'Photo of Xiao Huang.'

和其他文件一样,当操作结束时,我们需要关闭数据库:

db.close()

dbm的限制之一是键和值都必须是字符串字节,如果尝试使用其他类型,则会报错:

In [46]: db['test'] = 10
TypeError: values must be bytes or strings

这时,pickle模块就可以帮上忙了!

pickle模块

pickle模块实现了用于序列化和反序列化Python对象结构的二进制协议。pickle模块可以将python中几乎所有的数据类型(列表,字典,集合,类等)进行序列化。


我在网上查了一下关于序列化和反序列化的定义

解释1:

序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。
在序列化期间,对象将其当前状态写入到临时或持久性存储区。
以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

嗯,这个解释还是挺好理解的。我们再以JAVA为例,看一下对于序列化和反序列化的解释。

解释2:

Java序列化就是指把Java对象转换为字节序列的过程
Java反序列化就是指把字节序列恢复为Java对象的过程

感觉在python中序列化和反序列化的应用和JAVA很像鸭!

通过下面的实验,我们可以看到,python中利用pickle.dumps函数对列表进行序列化,可以得到字节数据;再利用pickle.loads反序列化,可以重新得到列表。


  • dumps与loads

pickle.dumps接收一个对象作为参数,并返回它的字节串形式:

In [58]: import pickle...: ...: t1 = [1, 2, 3]...: s = pickle.dumps(t1)...: print(s)...: print(type(s))
b'\x80\x03]q\x00(K\x01K\x02K\x03e.'
<class 'bytes'>

我们还可以使用pickle.loads重新构造对象:

import picklet1 = [1, 2, 3]
s = pickle.dumps(t1)
t2 = pickle.loads(s)
print(t2)print('值相同么:', t1 == t2)
print('是同一个对象么', t1 is t2)

输出结果:

[1, 2, 3]
值相同么: True
是同一个对象么 False

利用pickle模块,我们向数据库中存入列表:

import dbm
import pickledb = dbm.open('testdatabase', 'c')t = [1, 2, 3]
s = pickle.dumps(t)
db['list01'] = s
print(db['list01'])db.close()

输出结果:

b'\x80\x03]q\x00(K\x01K\x02K\x03e.'

perfect!

python观察日志(part9)--数据库与pickle模块相关推荐

  1. [python](windows)分布式进程问题:pickle模块不能序列化lambda函数

    运行错误:_pickle.PicklingError: Can't pickle <function <lambda> at 0x000002BAAEF12F28>: attr ...

  2. MongoDB数据库(8.Python中使用mongodb数据库以及pymongo模块用法)

    在Python中使用MongoDB数据库,首先要下载pymongo模块 直接在命令行   pip install pymongo   就可以了 Python中使用pymongo模块对MongoDB数据 ...

  3. python 列表 字典 读写文件:pickle模块的基本使用

    建议大家使用cPickle,速度更快!!! python数据持久存储:pickle模块的基本使用(转载) 作者: pzxbc 出处: http://pzxbc.cnblogs.com/ 本文版权归作者 ...

  4. Python学习日志16 - 数据库SQL查询

    Python学习日志 RBHGO的主页欢迎关注 温馨提示:创作不易,如有转载,注明出处,感谢配合~ 目录 文章目录 Python学习日志 目录 Python学习日志16课 - 数据库SQL查询 DQL ...

  5. python观察日志(part10)--__future__ 模块

    学习笔记,有错必纠 __future__模块 我们利用官方文档学习一下__future__模块: To avoid confusing existing tools that analyze impo ...

  6. python全栈开发-json和pickle模块(数据的序列化)

    一.什么是序列化? 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flat ...

  7. python观察日志(part24)--列表和numpy数组扁平化

    学习笔记,仅供参考,有错必究 参考文献:python–列表.数组扁平化:你知道如何将python中嵌套的列表扁平化吗? 列表扁平化 方案1 print(sum([[1, 2, 3], ["s ...

  8. R语言观察日志(part9)--RMarkdown之输出格式

    学习笔记,仅供参考,有错必纠 参考自:官方文档rmarkdown;R Markdown中配置python R Markdwon 输出格式 设置render的output_format参数,可以将.Rm ...

  9. python观察日志(part22)--设置工作目录及文件读取

    学习笔记,仅供参考 参考自:pandas.read_csv参数详解:<python编程从数据分析到数据编程> 查看并更改当前工作目录 当前工作目录就是python(准确的说,是python ...

最新文章

  1. android 字体像素转换工具类_Android中px与dip,sp与dip等的转换工具类
  2. Python语言的全部数据类型分享!
  3. HDU3400+三分
  4. php中取出数组中指定的值,PHP除开数组中指定的值
  5. JavaSE——常用类库(上)(泛型、Objects、Math、ArraysBigDecimal类)
  6. 阶段3 3.SpringMVC·_05.文件上传_4 文件上传之Springmvc方式上传代码
  7. LSET与LREM结合删除list中特定索引的值
  8. Atom: 几个常用的快捷键,恢复主菜单
  9. Quartus II 15详细安装教程
  10. Visio2013 Professional专业版密钥
  11. 怎样在计算机上注册dll文件,win10如何注册dll文件_win10系统dll文件怎样安装
  12. 【建站指南】网站搭建需要准备什么?
  13. matlab data数据类型,MATLAB - 数据类型
  14. 2021年1月PHP面试题总结
  15. 腾云忆想技术干货|TSF微服务治理实战系列(一)——治理蓝图
  16. 技术面试(一)认识技术面试
  17. flutter 自定义TabBar +自定义Indicator
  18. 用Java编程开发“六级单词强化记忆”游戏
  19. 计算机efs加密,EFS加密
  20. python3中 operator模块用法介绍

热门文章

  1. 深度学习(二十三)——Fast Image Processing, SVDF, LCNN, LSTM进阶
  2. java mock什么意思_java @Mock, @MockBean 与 Mockito.mock( ) 之间的差异
  3. 两个sql交集_如何使用性能分析工具定位SQL执行慢的原因?
  4. java诸神之战游戏_mj回溯算法 - osc_7bgz0no1的个人空间 - OSCHINA - 中文开源技术交流社区...
  5. Java的回调机制--学习笔记
  6. Hadoop集群(第3期)_VSFTP安装配置
  7. oracle修改参数
  8. 一个静态库框架模板: iOS Universal Framework Mk 7
  9. Sharepoint学习笔记—Ribbon系列-- 3.在Ribbon中找到正确的Location
  10. Linux系统/网络管理