Frage

Ich habe Stunden damit verbracht, um Beispiele für die Suche, wie man das bsddb Modul verwenden, und die einzigen, die ich gefunden habe, sind diese ( von hier ):

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()

Weiß jemand, wo ich könnte mehr (praktisch) Beispiele finden, wie dieses Paket zu benutzen?

Oder würde jemand Geist-Sharing-Code, die sie selbst geschrieben haben, dass sie verwendet?

Edit:

Der Grund, warum ich die Berkeley DB wählte, war wegen seiner Skalierbarkeit. Ich arbeite an einer latenten semantischen Analyse von etwa 2,2 Millionen Web-Seiten. Meine einfache Prüfung von 14 Web-Seiten generiert rund 500.000 Datensätze. Damit die Mathematik aus ... werden es etwa 78,6 Milliarden Datensätze in meiner Tabelle sein.

Wenn jemand weiß, ein anderes effizienten, skalierbaren Datenbankmodell, das ich Python zugreifen kann, informieren Sie mich darüber wissen! ( lt_kije hat es darauf aufmerksam gemacht, dass bsddb 2.6 in Python ist veraltet und wird in 3 verschwunden sein. *)

War es hilfreich?

Lösung

In diesen Tagen, die meisten Leute benutzen die anydbm Meta-Modul mit db- Schnittstelle wie Datenbanken. Aber der API ist im Wesentlichen dict artig; finden Sie unter PyMOTW für einige Beispiele. Beachten Sie, dass bsddb wird in 2.6.1 veraltet und wird in 3.x. verschwunden sein Die Umstellung auf anydbm wird das Upgrade erleichtern; Umschalten auf SQLite (die jetzt in stdlib ist) wird Ihnen ein viel flexibleres Speicher.

Andere Tipps

Schauen Sie sich: Lib3 / bsddb / Test nach der Quelle von http: //pypi.python. org / pypi / bsddb3 /

Die Stromverteilung enthält die folgenden Tests, die sehr hilfreich sind mit bsddb3 zu arbeiten:

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

Ich gehe davon aus diesem Thread noch aktiv ist, so hier gehen wir. Dies ist rau Code und es gibt keine Fehlerprüfung, aber es kann als Ausgangspunkt nützlich sein.

wollte ich in PHP fest eingebauten in DBA-Funktionen verwenden und dann die Datenbank lesen Sie einen Python (2.x) Skript. Hier ist der PHP-Skript, das die Datenbank erstellt:

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

Nun, hier ist der PHP-Code einen Eintrag einzufügen: Ich benutze JSON die „echten“ Daten zu halten:

<?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);
?>

Nun, hier ist der Code, den Sie und ich in wirklich interessiert sind, und es nutzt Python bsddb3 Modul.

#!/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()

Die Suche nach "import bsddb", erhalte ich:

... aber persönlich würde ich stark empfehlen Sie SQLite statt bsddb verwenden, die Menschen der ehemaligen aus einem Grunde viel mehr verwenden.

Die Gramps Genealogie-Programm verwendet bsddb für seine Datenbank

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top