python数据库(一)

来源:互联网 发布:简述波士顿矩阵分析法 编辑:程序博客网 时间:2024/06/06 07:40

1.使用dbm作为持久化字典

#!/usr/bin/python#coding:utf-8'''用持久字典来存储名称/值对数据是在磁盘读取和写入的dbm的键和值必须是字符串类型'''#三个实体items(物品信息)、members(成员信息)、loans(租借信息) #创建一个LendyDB DBM数据库(三个DBM文件)import dbm# ID, Name, Description, OwnerID, Price, Condition, DateRegistereditems = [        ['1','Lawnmower','Tool','1','$150','Excellent','2012-01-05'],        ['2','Lawnmower','Tool','2','$370','Fair','2012-04-01'],        ['3','Bike','Vehicle','3','$200','Good','2013-03-22'],        ['4','Drill','Tool','4','$100','Good','2013-10-28'],        ['5','Scarifier','Tool','5','$200','Average','2013-09-14'],        ['6','Sprinkler','Tool','1','$80','Good','2014-01-06']         ]# ID, Name, Emailmembers = [        ['1', 'Fred', 'fred@lendylib.org'],        ['2', 'Mike', 'mike@gmail.com'],        ['3', 'Joe', 'joe@joesmail.com'],        ['4', 'Rob', 'rjb@somcorp.com'],        ['5', 'Anne', 'annie@bigbiz.com'],        ]# ID, ItemID(对应items ID), BorrowerID(对应members ID), DateBorrowed, DateReturnedloans = [        ['1','1','3','4/1/2012','4/26/2012'],        ['2','2','5','9/5/2012','1/5/2013'],        ['3','3','4','7/3/2013','7/22/2013'],        ['4','4','1','11/19/2013','11/29/2013'],        ['5','5','2','12/5/2013','None']        ]def createDB(data,dbName):    try:        db = dbm.open(dbName,'c')        for datum in data:            key = datum[0]            db[key] = ','.join(datum)      #使用第一个字段(ID)作为主键且所有字段用','分割        #   print(key)             #打印键        #   print(db[datum[0]])         #打印值    finally:        db.close()        print(dbName,'created')def readDB(dbName):    try:        db = dbm.open(dbName,'r')        print('Reading ',dbName)        return [db[key] for key in db.keys()]#通过键,返回一个数据列表    finally:        db.close()def main1():    print('Creating data files...')    createDB(items,'itemdb')    createDB(members,'memberdb')    createDB(loans,'loandb')    print('Reding data files...')    print(readDB('itemdb'))    print(readDB('memberdb'))    print(readDB('loandb'))def main2():    items = dbm.open('itemdb')    members = dbm.open('memberdb')    loans = dbm.open('loandb','w')        loan2 = loans['2'].decode()   #decode()把dbm字节格式转换成str字符串格式    print('loan2:',loan2)    loan2 = loan2.split(',')      #split()将str字符串分离成单独的域,返回一个列表     print('loan2:',loan2)    #通过使用借出记录值作为键,提取对应的成员和物品记录#    item2 = items[loan2[1]].decode().split(',')    print('items:',item2)    member2 = members[loan2[2]].decode().split(',')    print('members:',member2)    print('{} borrowed a {} on {}'.format(        member2[1],item2[1],loan2[3]))    if __name__ == '__main__':    main1()    main2()
2.使用shelve作为持久化字典

#/usr/bin/python3#coding:utf-8import shelve# ID, Name, Description, OwnerID, Price, Condition, DateRegistereditems = [['1','Lawnmower','Tool','1','$150','Excellent','2012-01-05'],['2','Lawnmower','Tool','2','$370','Fair','2012-04-01'],['3','Bike','Vehicle','3','$200','Good','2013-03-22'],['4','Drill','Tool','4','$100','Good','2013-10-28'],['5','Scarifier','Tool','5','$200','Average','2013-09-14'],['6','Sprinkler','Tool','1','$80','Good','2014-01-06'] ]# ID, Name, Emailmembers = [['1', 'Fred', 'fred@lendylib.org'],['2', 'Mike', 'mike@gmail.com'],['3', 'Joe', 'joe@joesmail.com'],['4', 'Rob', 'rjb@somcorp.com'],['5', 'Anne', 'annie@bigbiz.com'],]# ID, ItemID, BorrowerID, DateBorrowed, DateReturnedloans = [['1','1','3','4/1/2012','4/26/2012'],['2','2','5','9/5/2012','1/5/2013'],['3','3','4','7/3/2013','7/22/2013'],['4','4','1','11/19/2013','11/29/2013'],['5','5','2','12/5/2013','None']]def createDB(data, shelfname):    try:       shelf = shelve.open(shelfname,'c')       for datum in data:           key = datum[0]           shelf[key] = datum    finally:       shelf.close()def readDB(shelfname):    try:       shelf = shelve.open(shelfname,'r')       return [shelf[key] for key in shelf.keys()]    finally:       shelf.close()def main1():    print('Creating data files...')    createDB(items, 'itemshelf')    createDB(members, 'membershelf')    createDB(loans, 'loanshelf')    print('reading items...')    print(readDB('itemshelf'))    print('reading members...')    print(readDB('membershelf'))    print('reading loans...')    print(readDB('loanshelf'))def main2():    items = shelve.open('itemshelf','w')    members = shelve.open('membershelf','w')    loans = shelve.open('loanshelf','w')        #与dbn区别:不再需要使用decode()把字节转换成普通字符串,不需要进行split()操作获得一个列表    loan2 = loans['2']    print('loan2:',loan2)    item2 = items[loan2[1]]    print('item2:',item2)    member2 = members[loan2[2]]    print('member2:',member2)    print('{} borrowed a {} on {}'.format(        member2[1],item2[1],loan2[3]))if __name__ == "__main__":     main1()    main2()


原创粉丝点击