zoukankan      html  css  js  c++  java
  • Python文件_数据库与Pickle模块

    一,数据库

    数据库是一个用来管理已存储数据的文件,很多数据库都以类似字典的形式来管理数据,就是从键到键值成对映射。

    数据库和字典的最大区别就在于数据库是存储在磁盘,或者其他永久性存储设备中,所以程序运行结束退出后,数据库依然存在。

    1.dbm模块提供了一个创建和更新数据库文件的交互接口。

    >>> import dbm

    >>> db = dbm.open('my-photo', 'c')

    后面这个 'c' 是一个模式,意思是如果该数据库不存在就创建一个新的。得到的返回结果就是一个数据库对象了,用起来很多的运算都跟字典很像。

    2.创建一个新的项的时候,dbm就会对数据库文件进行更新了:

    db['tom.png'] = 'photo of tom.'

    读取里面的某一项的时候,dbm 就读取数据库文件:

    >>> db['tom.png']

    b'photo of tom.'    #这里以b开头,返回的是一个二进制对象。

    3.如果对一个已经存在值的键进行赋值,dbm 就会把旧的值替换成新的值:

    >>> db['tom.png']

    b'photo of tom.'

    >>> db['tom.png'] = 'this is jack'

    >>> db['tom.png']

    b'this is jack'

    4.字典的一些方法,比如 keys 和 items,不能用于数据库对象。但用一个 for 循环来迭代是可以的:

    $ cat c.py

    #!/bin/python

    import dbm

    db = dbm.open('myphoto', 'c')

    db['tom.png'] = 'photo of tom'

    db['jack.png'] = 'photo of jack'

    db['jim.png'] = 'photo of jim'

    for key in db.keys():

        print(key, db[key])

    db.close()

    $ python3 c.py

    b'jack.png' b'photo of jack'

    b'tom.png' b'photo of tom'

    b'jim.png' b'photo of jim'

    5.同其他文件一样,用完了之后你得用 close 方法关闭数据库:

    >>>db.close()

    二,Pickle模块

    dbm 的局限就在于键和键值必须是字符串或者二进制;如果用其他类型数据,就得到错误了。

    1.这时候就可以用 pickle 模块了。该模块可以把几乎所有类型的对象翻译成字符串模式,以便存储在数据库中,然后用的时候还可以把字符串再翻译回来。

    pickle.dumps 接收一个对象做参数,然后返回一个字符串形式的内容翻译(dumps即dump string的缩写):

    >>> import pickle

    >>> t = [1, 2, 3]

    >>> pickle.dumps(t)

    b'x80x03]qx00(Kx01Kx02Kx03e.'

    虽然这种二进制的格式让人读起来挺复杂;但是这种设计能让 pickle 模块解译起来比较容易。

    2.使用pickle.lods("load string"),会把原来存储的对象解译出来:

    >>> t1 = [1, 2, 3]

    >>> s = pickle.dumps(t1)

    >>> s

    b'x80x03]qx00(Kx01Kx02Kx03e.'

    >>> t2 = pickle.loads(s)

    >>> t2

    [1, 2, 3]

    这里要注意了,虽然新的对象与旧的有一样的值,但(通常)并不是同一个对象,可以使用is方法来验证:

    >>> t1 == t2

    True

    >>> t1 is t2

    False

    换句话说,就是说 pickle 解译的过程就如同复制了原有对象一样;是复制了一个对象,而非同一个对象。

    有 pickle了,就可以把非字符串的数据也存到数据库里面了。

    结束。

  • 相关阅读:
    LSMW TIPS
    Schedule agreement and Delfor
    Running VL10 in the background 13 Oct
    analyse idoc by creation date
    New Journey Prepare
    EDI error
    CBSN NEWS
    Listen and Write 18th Feb 2019
    Microsoft iSCSI Software Target 快照管理
    通过 Microsoft iSCSI Software Target 提供存储服务
  • 原文地址:https://www.cnblogs.com/liusingbon/p/13221188.html
Copyright © 2011-2022 走看看