<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Skynet

    ---------- ---------- 我的新 blog : liukaiyi.cublog.cn ---------- ----------

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      112 Posts :: 1 Stories :: 49 Comments :: 0 Trackbacks

    在實際中也可以 由文件導入 db 庫中 
        awk -F: '{print $1; print $0}' < /etc/passwd 顯示為:
    root
    root:x:0:0:root:/root:/bin/bash
    bin
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    ............

    awk -F: '{print $1; print $0}' < /etc/passwd |sed 's/\\/\\\\/g'  | db_load -T -t hash passwd.db

    hash 入庫為  key 為奇數行,value 為 偶數行


    下面轉,收集

       bsddb模塊是用來操作bdb的模塊,bdb是著名的Berkeley DB,它的性能非常好,mysql的存儲后端引擎都支持bdb的方式。這里簡單介紹一些關于bsddb的使用方法。

        bdb不同于一般的關系數據庫,它存儲的數據只能是以key和value組成的一對數據,使用就像python的字典一樣,它不能直接表示多個字段,當要存儲多個字段的數據時,只能把數據作為一個整體存放到value中。
    使用bsddb面臨的第一問題是使用什么數據訪問方法,bdb支持四種:btree, hash, queue, recno。這里先說說它們有什么區別,btree是用的樹結構來才存儲的數據,查詢速度很快,可以存儲任意復雜的key和value。hash是用的hash算法,速度其實和btree比差不多的,但是當數據量特別巨大時,應該使用hash。queue是隊列操作,它有一個限制,它只能存儲定長的數據,也就是說value的長度是固定的!但是queue可以保持數據的先進先出,并且對數據的插入做了特殊的優化,并且提供行級鎖。queue的key必須是數字。recno和queue類似,但是它可以支持變長的value,它的key同樣也是數字。

        這里先對這四種數據訪問方法分別做打開數據庫,簡單插入一條數據的演示。
    對于python的bsddb模塊來說,打開數據庫的操作有兩種方式,一是使用原始的接口,就是先打開一個環境,然后從這個環境中打開一個數據庫,就像下面:

    import bsddb

    dbenv 
    = bsddb.db.DBEnv()
    dbenv.open(home, bsddb.db.DB_CREATE 
    | bsddb.db.DB_INIT_MPOOL)
    = bsddb.db.DB(dbenv)
    d.open(filename, bsddb.db.DB_BTREE, bsddb.db.DB_CREATE, 
    0666)


    還有一種方式是python特有的,這個是bsddb模塊本身對上面的過程做了包裝,比如打開btree的:

    import bsddb

    db 
    = bsddb.btopen('test.db''c')


    看起來比上面的簡單多了吧。但這種方式提供的接口很有限,也只有很簡單的功能,沒有第一種的靈活,但是它在python2.5的版本里是線程安全的。這里都介紹一下。
    看看一個例子:
     
    #-*- encoding: gb2312 -*-
    import os, sys, string
    import bsddb, time

    home 
    = "db_home"
    filename 
    = "test.db"
    try:
        
    # 創建home目錄
        os.mkdir(home)
    except:
        
    pass

    # 創建數據庫環境
    dbenv = bsddb.db.DBEnv()
    # 打開數據庫環境
    dbenv.open(home, bsddb.db.DB_CREATE | bsddb.db.DB_INIT_MPOOL)
    # 創建數據庫對象
    = bsddb.db.DB(dbenv)
    # 打開數據庫, 這里的第二個參數就是指定使用什么數據訪問方法
    #
     btree是 bsddb.db.DB_BTREE, hash是bsddb.db.DB_HASH
    #
     queu 是 bsddb.db.DB_QUEUE,  recno 是bsddb.db.DB_RECNO
    d.open(filename, bsddb.db.DB_BTREE, bsddb.db.DB_CREATE, 0666)
    # 插入一條數據,注意queue和recno的key不能是字符串的,應該是數字
    d.put('test1''zhaowei')    
    print d.items()
    # 關閉,這時會把數據寫回文件
    d.close()
    dbenv.close()

    下面來個使用queue的,注意看有什么區別:

    #-*- encoding: gb2312 -*-
    import os, sys, string
    import bsddb, time

    home 
    = "db_home"
    filename 
    = "testqueue.db"
    try:
        os.mkdir(home)
    except:
        
    pass

    dbenv 
    = bsddb.db.DBEnv()
    dbenv.open(home, bsddb.db.DB_CREATE 
    | bsddb.db.DB_INIT_MPOOL)
    = bsddb.db.DB(dbenv)
    # queue必須要設置一個value的長度,它的value是定長的
    d.set_re_len(40)
    d.open(filename, bsddb.db.DB_QUEUE, bsddb.db.DB_CREATE, 
    0666)
    # 它的key必須是數字
    d.put(1'zhaowei')
    print d.items()

    d.close()
    dbenv.close()

    那簡單的第二種方式使用如下, 要簡潔很多了:

    import bsddb

    = bsddb.hashopen("aaa.db""c")
    d[
    'test1'= "zhaowei"
    print d.items()
    d.close()



    整理 m.tkk7.com/Good-Game
    posted on 2009-06-16 23:22 劉凱毅 閱讀(1388) 評論(0)  編輯  收藏 所屬分類: python
    主站蜘蛛池模板: 精品亚洲成在人线AV无码| 亚洲精品第一国产综合境外资源| 亚洲国产精品无码久久一线| jizz在线免费观看| 亚洲国产中文字幕在线观看| v片免费在线观看| 国产精品亚洲高清一区二区| 一区二区3区免费视频| 亚洲综合色视频在线观看| 精品国产污污免费网站入口在线| 国产亚洲精品不卡在线| 最近中文字幕大全免费版在线 | 182tv免费视视频线路一二三| 婷婷亚洲久悠悠色悠在线播放| 无码人妻久久一区二区三区免费 | 精品免费久久久久久成人影院| 精品亚洲国产成人av| 亚洲成AV人在线观看网址| 一本大道一卡二大卡三卡免费| 亚洲精品乱码久久久久久蜜桃不卡 | 亚洲成年人电影在线观看| 黄色网址免费观看| 亚洲色一区二区三区四区| 亚洲?V乱码久久精品蜜桃| 三上悠亚电影全集免费| 亚洲视频日韩视频| 在线观看视频免费国语| 国产精品美女久久久免费 | 免费在线观看的黄色网址| 天黑黑影院在线观看视频高清免费| 亚洲欧洲日产国产综合网| AV免费网址在线观看| 日韩免费高清一级毛片| 久久久久亚洲AV成人无码网站| 亚洲成在人线aⅴ免费毛片| 无码日韩人妻AV一区免费l| 亚洲精品免费观看| 成人一a毛片免费视频| 中文字幕成人免费高清在线 | 理论片在线观看免费| 日木av无码专区亚洲av毛片|