随着项目的深刻,python对象持久化问题也随之而来。而在这以前,对于python对象持久化还停留在pickle时代,而这已没法知足当前项目发展的须要了,因而只好借助google疯狂的学习了一把,同时也对学习的内容做个小小的记录。html
通过学习整理,目前已知有以下的方式来实现python对象持久化:java
python库已提供的python对象持久化方法:python
一、使用dbhash/bsddb(bsddb在python3.x已经废弃), gdbm, dbm, dumbdbm通用型anydbm接口(anydbm经过whichdb模块自动适配当前系统环境支持的dbm模块),提供python字符串存储到一个相似dictionary文件对象介质功能;linux
二、marshal和pickle以及cPickle(pickle的c编译版本),都具有存储到介质上的功能;但marshal仅支持基本数据类型(dictionary、list、tuple、numbers、string),且不保证python不一样版本之间的兼容性;pickle除了能够处理基本数据类型外还能够处理循环、递归引用对象、用户定义的类和实例以及可移植性(pickle文件结构独立于机器的体系结构)等;程序员
三、为解决pickle命名、查找以及并发访问持久性对象问题,python库在cPickle基础上提供了shelve模块,shelve模块使用anydbm模块适配系统支持的dbm模块,后使用cPickle完成对象存储,同时shelve模块支持对dbm文件并发读;数据库
第三方提供的python对象持久化方法:python3.x
一、ZODB:ZODB是一个健壮的、多用户和面向对象的数据库系统,它可以存储和管理任意复杂的python对象,并提供事务操做和并发控制支持;并发
二、Durus:Quixote团队的做品,能够看做是轻量级版本的ZODB实现,纯开源的Python实现,并提供一个可选的C语言插件类;less
三、Missile BD: 是一种Python的、简洁高效的DBMS,适用于Stackless Python环境。同时须要说明的是它是并发性能极高的Eurasia3项目的一个子项目;性能
四、ODB(spugdb):一个轻量级的纯Python实现的Python对象数据库系统,支持嵌套事务、对象模型、游标和一个简单的相似X-Path的查询语言,它的前身只是围绕Berkeley DB作的Python包装,如今已逐步淘汰对Berkeley DB的支持;
五、PyPerSyst:它是由用java实现的Provayler到Python的移植实现,PyPerSyst将整个对象系统保存在内存中,经过将系统快照pickle到磁盘以及维护一个命令日志(经过日志能够从新应用最新的快照)来提供灾难恢复。所以PyPerSyst应用程序会受到可用内存的限制,但好处是本机对象系统能够彻底装入到内存中,于是速度极快;
六、PyDbLite:Python实现的快速的、无类型的内存数据库引擎,使用Python语法代替SQL语法,支持Python2.3以及以上版本,同时提供对SQLite和MySQL支持;
七、buzhug:Python实现的快速的数据库引擎,使用Python程序员以为直观的语法,数据存储在磁盘上;
八、Gadfly:它是一个简单的关系数据库系统,使用Python基于SQL结构化查询语言实现。
针对以上Python对象持久化方法,大部分都是基于pickle为基础来实现的;固然文中并无提到Python对象使用MSSQL、MySQL、Oracle、DB二、SQLite等数据库来实现的方法,这是因为Python已经提供了对目前已知数据库(基本全覆盖)的完整的支持,所以本文并未对Python对象数据库持久化部分进行描述。
本文仅对Python对象持久化的方法进行整理,后面根据须要会对各类序列化的方法予以简要介绍,若是你有兴趣也能够联系我。
因为本文是经过阅读官方文档以及相应中文资料整理而成,所以不免会出现疏漏,有心的童鞋若是发现文中描述有误,请留言;也欢迎各位和我一块儿探讨Python。
最后也欢迎各位进行转载,不过转载请注明出处,谢谢。
参考资料:
python对象序列化或持久化的方法:http://hi.baidu.com/jasonlyy/blog/item/927efbde1f9155a8cd116684.html