Где я могу найти примеры использования bsddb?

Я часами искал примеры того, как использовать модуль 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, была ее масштабируемость. Я работаю над скрытым семантическим анализом около 2,2 миллиона веб-страниц. Мое простое тестирование 14 веб-страниц дает около 500000 записей. Итак, посчитаем... в моей таблице будет около 78,6 миллиардов записей.

Если кто-нибудь знает другую эффективную, масштабируемую модель базы данных, к которой я могу использовать python, пожалуйста, дайте мне знать об этом! (lt_kije довел до моего сведения, что bsddb устарела в Python 2.6 и исчезнет в 3.*)

5 ответов

Решение

В наши дни большинство людей используют метамодуль anydbm для взаимодействия с базами данных, подобными db. Но API по существу похож на диктовку; см. PyMOTW для некоторых примеров. Обратите внимание, что bsddb устарела в 2.6.1 и исчезнет в 3.x. Переход на anydbm облегчит обновление; переход на sqlite (который сейчас находится в stdlib) даст вам гораздо более гибкий магазин.

Посмотрите на: Lib3/bsddb/test после загрузки источника с http://pypi.python.org/pypi/bsddb3/

Текущий дистрибутив содержит следующие тесты, которые очень полезны для начала работы с 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_dbshelve.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

Я предполагаю, что этот поток все еще активен, так что здесь мы идем. Это грубый код, и нет проверки ошибок, но он может быть полезен в качестве отправной точки.

Я хотел использовать встроенные в 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()

Ища "import bsddb", я получаю:

... но лично я настоятельно рекомендую вам использовать sqlite вместо bsddb, люди используют первое гораздо чаще.

Генеалогическая программа Gramps использует bsddb для своей базы данных

Другие вопросы по тегам