8

我花了几个小时寻找如何使用 bsddb 模块的示例,我发现的唯一示例是这些(来自这里):

data = mydb.get(key)
if data:
    doSomething(data)
#####################
rec = cursor.first()
while rec:
    print rec
    rec = cursor.next()
#####################
rec = mydb.set()
while rec:
    key, val = rec
    doSomething(key, val)
    rec = mydb.next()

有谁知道我在哪里可以找到更多(实用)如何使用这个包的例子?

或者有人会介意分享他们自己编写的使用它的代码吗?

编辑:

我选择 Berkeley DB 的原因是因为它的可扩展性。我正在对大约 220 万个网页进行潜在语义分析。我对 14 个网页的简单测试生成了大约 500,000 条记录。所以算一算……我的表中将有大约 786 亿条记录。

如果有人知道我可以使用 python 访问的另一种高效、可扩展的数据库模型,请告诉我!(lt_kije引起了我的注意,bsddb它在 Python 2.6 中已弃用,将在 3.* 中消失)

4

5 回答 5

8

如今,大多数人使用anydbm元模块与类似 db 的数据库进行交互。但是API本质上是类似 dict 的;有关一些示例,请参见PyMOTW。请注意,bsddb 在 2.6.1 中已弃用,并将在 3.x 中消失。切换到anydbm会使升级更容易;切换到 sqlite(现在在 stdlib 中)将为您提供更灵活的存储。

于 2009-04-01T18:08:21.310 回答
5

从http://pypi.python.org/pypi/bsddb3/下载源码后看:Lib3/bsddb/test

当前发行版包含以下对开始使用 bsddb3 非常有帮助的测试:

test_all.py
test_associate.py
test_basics.py
test_compare.py
test_compat.py
test_cursor_pget_bug.py
test_dbenv.py
test_dbobj.py
test_db.py
test_dbshel​​ve.py
test_dbtables.py
test_distributed_transactions.py
test_early_close.py
test_fileid.py
test_get_none.py
test_join.py
test_lock.py
test_misc.py
test_pickle.py
test_queue.py
test_recno.py
test_replication.py
test_sequence.py
test_thread.py
于 2012-02-18T23:27:46.893 回答
5

我假设这个线程仍然处于活动状态,所以我们开始吧。这是粗略的代码,没有错误检查,但作为起点,它可能很有用。

我想使用 PHP 的内置 DBA 函数,然后使用 Python (2.x) 脚本读取数据库。这是创建数据库的 PHP 脚本:

<?php 
$id=dba_open('visitor.db', 'c', 'db4');
dba_optimize($id);
dba_close($id);
?>

现在,这是插入条目的 PHP 代码:我使用 JSON 来保存“真实”数据:

<?php 
/* 
    record a visit in a BSD DB
*/
$id=dba_open('visitor.db', 'w', 'db4');
if (!$id) {
    /* dba_open failed */
    exit;
}
$key  = $_SERVER['REQUEST_TIME_FLOAT']; 
$rip  = $_SERVER['REMOTE_ADDR'];
$now  = date('d-m-Y h:i:s a', time()); 
$data = json_encode( array('remote_ip' => $rip, 'timestamp' => $now) );
$userdata=array($key => $data);
foreach ($userdata as $key=>$value) {
dba_insert($key, $value, $id);
}
dba_optimize($id);
dba_close($id);
?>

现在,这是您和我真正感兴趣的代码,它使用 Python 的 bsddb3 模块。

#!/usr/bin/env python
from bsddb3 import db
import json

fruitDB = db.DB()
fruitDB.open('visitor.db',None,db.DB_BTREE,db.DB_DIRTY_READ)
cursor = fruitDB.cursor()
rec = cursor.first()

while rec:
    print rec
    visitordata = rec[1]
    print '\t' + visitordata
    jvdata = json.loads(visitordata)
    print jvdata
    rec = cursor.next()
    print '\n\n'
print '----';

fruitDB.close()
于 2013-08-09T10:46:39.030 回答
4

搜索“import bsddb”,我得到:

...但我个人强烈建议您使用 sqlite 而不是 bsddb,人们更多地使用前者是有原因的。

于 2009-04-01T18:06:11.220 回答
1

Gramps家谱程序使用 bsddb 作为其数据库

于 2015-07-19T09:08:29.977 回答