Question

J'ai passé des heures à chercher des exemples de la façon d'utiliser le module bsddb et les seuls que j'ai trouvé sont ces ( d'ici ):

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

Est-ce que quelqu'un sait où je pourrais trouver des exemples plus (pratiques) de la façon d'utiliser ce paquet?

Ou coderez de partage quelqu'un d'esprit qu'ils ont eux-mêmes écrit que l'a utilisé?

Modifier

La raison pour laquelle j'ai choisi le Berkeley DB était en raison de son évolutivité. Je travaille sur une analyse sémantique latente d'environ 2,2 millions de pages web. Mon simple test de 14 pages Web génère environ 500 000 dossiers. faire le calcul sur ... il y aura environ 78,6 milliards d'enregistrements dans ma table.

Si quelqu'un connaît un autre modèle de base de données efficace, évolutive que je peux utiliser python pour accéder, s'il vous plaît laissez-moi savoir! ( lt_kije a apporté à mon attention que bsddb est dépréciée en Python 2.6 et disparu en 3. *)

Était-ce utile?

La solution

Ces jours-ci, la plupart des gens utilisent le anydbm méta-module d'interface avec DB- bases de données similaires. Mais le est essentiellement dict semblable; voir quelques exemples PyMOTW . Notez que bsddb est dépréciée en 2.6.1 et sera allé à 3.x. Le passage à anydbm fera la mise à jour plus facile; le passage à SQLite (qui est maintenant stdlib) vous donnera un magasin beaucoup plus flexible.

Autres conseils

Regardez: lib3 / bsddb / test après avoir téléchargé la source http: //pypi.python. org / pypi / bsddb3 /

La distribution actuelle contient les tests suivants qui sont très utiles pour commencer à travailler avec 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

Je suppose que ce fil est toujours actif, alors allons-y. Ce code est rude et il n'y a pas de vérification des erreurs, mais il peut être utile comme point de départ.

Je voulais utiliser les fonctions de DBA intégrées de PHP puis lisez la base de données en utilisant un script Python (2.x). Voici le script PHP qui crée la base de données:

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

Maintenant, voici le code PHP pour insérer une entrée: J'utilise JSON pour maintenir les données « réel »:

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

Maintenant, voici le code que vous et moi sommes réellement intéressés par, et il utilise le module bsddb3 Python.

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

Recherche de "bsddb d'importation", je reçois:

... mais personnellement, je vous recommande fortement d'utiliser au lieu de vous sqlite bsddb, les gens utilisent l'ancien beaucoup plus pour une raison.

scroll top