亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python bsddb模塊操作Berkeley DB數據庫介紹

系統 1753 0

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)
d = 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)
# 創建數據庫對象
d = 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)
d = 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

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


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 有码一区 | 久久r视频| 亚洲一区二区三区一品精 | 久久精品国产只有精品6 | 久久99久久99小草精品免视看 | 五月婷婷中文 | 日日摸日日碰夜夜97 | 国产性一交一乱一伦一色一情 | 日本成a人免费视频 | 国产精品久久精品 | 亚洲欧美日韩中文综合在线不卡 | 99精品欧美一区二区三区美图 | 日本免费一区视频 | 香蕉视频成人在线观看 | 男人天堂视频在线观看 | 可以免费观看的毛片 | 99在线国产 | 九九影院理论片私人影院 | 日韩1区| 波多野结衣一区二区三区在线观看 | 免费观看一区二区 | 日本高清免费不卡在线播放 | 九九在线精品视频xxx | 久久久久女人精品毛片九一 | 福利视频在线播放 | 国产精品视频在线免费观看 | 91日本在线精品高清观看 | 女人18毛片a级毛片免费视频 | 91视频爱爱| 毛片免费高清免费 | 日本午夜在线视频 | 91尤物视频在线观看 | 手机在线看片不卡中文字幕 | 综合伊人久久 | 日韩一区二区三区在线观看 | 欧美精品成人a多人在线观看 | 国产精品视频公开费视频 | 国产成人精品综合网站 | 欧美成人在线免费 | 天天婷婷| 国产精品9999久久久久仙踪林 |