最近喜欢上了Python,喜欢它的简洁高效,喜欢它的“无所不能”。
在动手我计划的项目之前,打算先储备些基础知识。之前已经对基本的语法熟悉了,现在该对数据操作做一些深入了。Python的数据持久化操作主要是六类:普通文件、DBM文件、Pickled对象存储、shelve对象存储、对象数据库存储、关系数据库存储。
普通文件不解释了,DBM就是把字符串的键值对存储在文件里:
% python >>> import anydbm >>> file = anydbm.open('movie', 'c') # make a DBM file called 'movie' >>> file['Batman'] = 'Pow!' # store a string under key 'Batman' >>> file.keys( ) # get the file's key directory ['Batman'] >>> file['Batman'] # fetch value for key 'Batman' 'Pow!'
Pickled就是把对象序列化到文件,可以存储复杂类型:
% python >>> table = {'a': [1, 2, 3], 'b': ['spam', 'eggs'], 'c': {'name':'bob'}} >>> >>> import pickle >>> mydb = open('dbase', 'w') >>> pickle.dump(table, mydb)
下面是反序列化:
% python >>> import pickle >>> mydb = open('dbase', 'r') >>> table = pickle.load(mydb) >>> table {'b': ['spam', 'eggs'], 'a': [1, 2, 3], 'c': {'name': 'bob'}}
shelve存储差不多就是DBM和Pickled方式的结合,以键值对的形式把对象序列化到文件:
% python >>> import shelve >>> dbase = shelve.open("mydbase") >>> object1 = ['The', 'bright', ('side', 'of'), ['life']] >>> object2 = {'name': 'Brian', 'age': 33, 'motto': object1} >>> dbase['brian'] = object2 >>> dbase['knight'] = {'name': 'Knight', 'motto': 'Ni!'} >>> dbase.close( )
取数据:
% python >>> import shelve >>> dbase = shelve.open("mydbase") >>> len(dbase) # entries 2 >>> dbase.keys( ) # index ['knight', 'brian'] >>> dbase['knight'] # fetch {'motto': 'Ni!', 'name': 'Knight'}
对象数据库的存储没怎么了解,因为不习惯用它存储数据。感觉应该和shelve差不多吧,只是把数据保存到了数据库里(其实还是一个文件嘛),然后增加了些事务之类的高级功能。
Python中关系数据库的存储是重点,操作关系数据库最“简单”的就是直接用DB-API,就像Java里的JDBC;当然,数据结构复杂了、设计要求高了,就得找些ORM框架偷懒了,主要有独立的SQLAlchemy,Django的自带ORM等。这部分内容还是下一篇博客写吧,我不喜欢文章拉得长长的……