Pergunta

Eu passei horas procurando exemplos de como usar o módulo bsddb e os únicos que eu encontrei são estes ( daqui ):

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

Alguém sabe onde eu poderia encontrar mais (prático) exemplos de como usar este pacote?

Ou faria qualquer código partilha mente que eles escreveram-se que o utilizou?

Editar:

A razão que eu escolhi o Berkeley DB foi por causa de sua escalabilidade. Eu estou trabalhando em uma análise semântica latente de cerca de 2,2 milhões de páginas da web. Meu simples teste de 14 páginas da web gera cerca de 500.000 registros. Então, fazer a matemática para fora ... haverá cerca de 78,6 bilhões de registros em minha mesa.

Se alguém souber de um outro modelo de banco de dados eficiente e escalável, que eu possa usar python para acessar, por favor deixe-me saber sobre isso! ( lt_kije o trouxe ao meu conhecimento que bsddb está obsoleta em Python 2.6 e será ido em 3. *)

Foi útil?

Solução

Hoje em dia, a maioria das pessoas utilizar o anydbm meta-módulo de interface com db- bases de dados como. Mas a API é essencialmente dict-like; consulte PyMOTW para alguns exemplos. Note-se que bsddb está obsoleta em 2.6.1 e será ido em 3.x. Mudar para anydbm fará a atualização mais fácil; a mudança para sqlite (que está agora em stdlib) lhe dará uma loja muito mais flexível.

Outras dicas

Observe: lib3 / bsddb / teste depois de baixar a fonte de http: //pypi.python. org / pypi / bsddb3 /

A distribuição atual contém os seguintes testes que são muito úteis para começar a trabalhar com 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

Estou assumindo esta discussão ainda está ativo, então vamos lá. Este é o código áspero e não há nenhuma verificação de erros, mas pode ser útil como um ponto de partida.

Eu queria usar funções DBA built-in do PHP e, em seguida, ler o banco de dados usando um script Python (2.x). Aqui está o script PHP que cria o banco de dados:

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

Agora, aqui está o código PHP para inserir uma entrada: Eu uso JSON para armazenar os dados "reais":

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

Agora, aqui está o código que você e eu estamos realmente interessado, e ele usa módulo bsddb3 do 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()

Procurar "bsddb importação", eu recebo:

... mas pessoalmente eu fortemente recomendo que você use SQLite em vez de bsddb, as pessoas estão usando o lote um ex-mais por uma razão.

O Gramps usos programa de genealogia bsddb por sua banco de dados

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top