Domanda

Ho un modulo con firstname, lastname, età e sesso. Ora come posso inserire i dati nel Berkeley DB con Python? Sono davvero nuovo in questo tipo di database. La maggior parte del database ha le query SQL da associare e un cursore per ottenere e recuperare i dati. Ma in caso di Berkeley non esiste tale.

Ho letto di Berkeleys DB, ma non lo sto ottenendo. Qualunque aiuto è apprezzato

Sto usando Python 2.5

Come posso integrare questi dati che comunicano dalla forma in berkeley db ??

C'è qualche errore di errore quando eseguo sul server:

File "/usr/lib/python2.5/bsddb/__init__.py", line 306, in hashopen, referer:     http://192.168.2.181/~jeremy/index.html
[Fri Nov 08 17:26:55 2013] [error] [client 192.168.2.181]     , referer:     http://192.168.2.181/~jeremy/index.html
[Fri Nov 08 17:26:55 2013] [error] [client 192.168.2.181] d.open(file, db.DB_HASH,     flags, mode), referer: http://192.168.2.181/~jeremy/index.html
[Fri Nov 08 17:26:55 2013] [error] [client 192.168.2.181] bsddb.db, referer:     http://192.168.2.181/~jeremy/index.html
[Fri Nov 08 17:26:55 2013] [error] [client 192.168.2.181] ., referer:     http://192.168.2.181/~jeremy/index.html
[Fri Nov 08 17:26:55 2013] [error] [client 192.168.2.181] DBAccessError, referer:     http://192.168.2.181/~jeremy/index.html
[Fri Nov 08 17:26:55 2013] [error] [client 192.168.2.181] : , referer:     http://192.168.2.181/~jeremy/index.html
[Fri Nov 08 17:26:55 2013] [error] [client 192.168.2.181] (13, 'Permission denied'),     referer: http://192.168.2.181/~jeremy/index.html
[Fri Nov 08 17:26:55 2013] [error] [client 192.168.2.181] , referer:     http://192.168.2.181/~jeremy/index.html
[Fri Nov 08 17:26:55 2013] [error] [client 192.168.2.181] Premature end of script     headers: database.py, referer: http://192.168.2.181/~jeremy/index.html

Codice:

#!/usr/bin/python
import bsddb
import cgi

form = cgi.FieldStorage()

Fname = form.getvalue('firdtname')
Lname = form.getvalue('lastname')
Age = form.getvalue('age')
Gender = form.getvalue('gender')

db = bsddb.hashopen("/tmp/mydb.db","c")
db['FirstName'] = Fname
db['Lastname'] = Lname
db['Age'] = Age
db['Gender'] = Gender

db = bsddb.hashopen("/tmp/mydb.db")

print db['FirstName'], db['Lastname'], db['Age'], db['Gender']

db.close()

print "Content-type:text/html\n"
È stato utile?

Soluzione

Leggi e scrivi esattamente come un dizionario.

>>> import bsddb
>>> db = bsddb.hashopen('mydb.db')
>>> db['FirstName'] = 'Joe'
>>> db['LastName'] = 'Doe'
>>> db['Age'] = '30'
>>> db.close()
>>> 
>>> db = bsddb.hashopen('mydb.db')
>>> db['FirstName']
'Joe'

Tuttavia, Berkeley DB memorizza solo coppie di stringhe chiave/valore, quindi forse non è quello di cui hai davvero bisogno se vuoi archiviare quei valori per diverse voci diverse. Se nessun'altra lingua utilizzerà quel file DB, forse puoi utilizzare il modulo Shelve per archiviare i dettagli. Se hai bisogno che sia facile da usare per gli altri, potresti serializzare i dati del modulo come JSON. Qualcosa come questo:

>>> import json
>>> import bsddb
>>> db = bsddb.hashopen('mydb.db')
>>> form = {'FirstName': 'Joe', 'LastName': 'Doe', 'Age': 30}
>>> db['joedoe'] = json.dumps(form)
>>> db.close()
>>> 
>>> db = bsddb.hashopen('mydb.db')
>>> json.loads(db['joedoe'])
{'FirstName': 'Joe', 'LastName': 'Doe', 'Age': 30}

Ma francamente, questo inizia a sembrare sempre più simile a un anti-pattern e, a meno che tu non sia assolutamente limitato a usare Berkeley DB per qualche motivo, non dovresti farlo in questo modo. Dovresti usare SQLite per questo.

Altri suggerimenti

Dai documenti:

Python docs Berkeley- Vedi 'Put'

#include <db.h>

int
DB->put(DB *db,
    DB_TXN *txnid, DBT *key, DBT *data, u_int32_t flags);

Il metodo DB-> put () memorizza coppie di chiavi/dati nel database. Il comportamento predefinito della funzione db-> put () è quello di immettere la nuova coppia chiave/dati, sostituire qualsiasi chiave precedentemente esistente se i duplicati sono vietati o l'aggiunta di un elemento di dati duplicato se sono consentiti duplicati. Se il database supporta i duplicati, il metodo DB-> put () aggiunge il nuovo valore di dati alla fine del set duplicato. Se il database supporta i duplicati ordinati, il nuovo valore di dati viene inserito nella posizione ordinata corretta.

Documenti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top