Pregunta

Tengo un formulario con primer nombre, último nombre, edad y género. Ahora, ¿cómo inserto datos en el Berkeley DB con Python? Soy realmente nuevo en esta base de datos. La mayoría de las bases de datos tienen las consultas SQL para asociar y un cursor para obtener y obtener datos. Pero en el caso de Berkeley no existe tal.

He leyendo sobre Berkeleys DB, pero no lo estoy entendiendo. Cualquier ayuda es apreciada

Estoy usando Python 2.5

¿Cómo puedo integrar estos datos que salen de la forma a Berkeley DB?

Hay algún error que se comunique cuando me ejecuto en el servidor:

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

Código:

#!/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"
¿Fue útil?

Solución

Le lees y te escribes exactamente como un diccionario.

>>> 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'

Sin embargo, Berkeley DB almacena solo pares de cadenas clave/valor, por lo que tal vez eso no es lo que realmente necesita si desea almacenar esos valores para varias entradas diferentes. Si ningún otro idioma utilizará ese archivo DB, tal vez pueda usar el módulo de Shelve para almacenar dicts en escabeche. Si necesita que sea fácil de usar para otros, podría serializar sus datos de formulario como JSON. Algo como esto:

>>> 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}

Pero, francamente, esto comienza a parecerse cada vez más a un antipatrón, y a menos que esté absolutamente restringido a usar Berkeley DB por alguna razón, no debería hacerlo de esa manera. Debería usar SQLite para eso.

Otros consejos

De los documentos:

Python Docs Berkeley- Ver 'Put'

#include <db.h>

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

El método db-> put () almacena pares de teclas/datos en la base de datos. El comportamiento predeterminado de la función db-> put () es ingresar la nueva clave/par de datos, reemplazar cualquier clave previamente existente si se no permiten los duplicados o agregar un elemento de datos duplicados si se permiten duplicados. Si la base de datos admite duplicados, el método db-> sut () agrega el nuevo valor de datos al final del conjunto duplicado. Si la base de datos admite duplicados ordenados, el nuevo valor de datos se inserta en la ubicación ordenada correcta.

Documentos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top