-
持久性
持久性,就是指保持对象。
假定有一个
Python
程序,它可能是一个管理日常待办事项的程序,您希望在多次执行这个程序之间可以保存应用程序对象(待办事项)。换句话说,您希望将对象存储在磁盘上,便于以后检索。这就是持久性。
持久性有多种方案:
-
讲数据对象存储在某种格式的文本文件中
比如存在
csv
文件、关系数据库(MySQL
…)。这些存储机制都有一个共同点:存储的数据是独立于对这些数据进行操作的对象和程序。
- 好处是,数据可以作为共享的资源,供其它应用程序使用;
- 缺点是,用这种方式,可以允许其它程序访问对象的数据,这违背了面向对象的封装性原则 ——即对象的数据只能通过这个对象自身的公共(
public
)接口来访问。
除去上述底层优缺点,关系型数据库还存在
阻碍性不匹配(impedence-mismatch)
问题,因为数据库的底层结构是固定的,而需要被存储的数据类型可能与之不匹配。简而言之,此类持久性方法,存在数据类型转换的过程。
-
对象持久性
如果希望透明地存储
Python
对象,而不丢失其身份和类型等信息,则需要某种形式的对象序列化:它是一个将任意复杂的对象转成对象的文本或二进制表示的过程。同样,必须能够将对象经过序列化后的形式恢复到原有的对象。在 Python 中,
这种序列化过程称为 pickle
,可以将对象pickle
成字符串、磁盘上的文件或者任何类似于文件的对象,也可以将这些字符串、文件或任何类似于文件的对象unpickle
成原来的对象。除了
pickle
之外,还有ZODB
、Prevayler
(Python
版本PyPerSyst
) -
pickle
与cPickle
import cPickle as pickle # cPickle是pickle的C版本
pickle
模块主要使用4个函数:pickle.dump()
、pickle.load()
、pickle.dumps()
、pickle.loads()
-
pickle.dump()
存储到本地(序列化操作)data = 'something with type' with open('pickle_file.pickle', 'wb') as file: pickle.dump(data, file)
-
pickle.load()
载入程序(反序列化操作)with open('pickle_file.pickle', 'rb') as file: df = pickle.load(file)
-
References
08-10
17万+
04-18
04-18
04-18
04-18
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交