Inserindo dados através de campos de formulário no banco de dados Berkeleys com Python [fechado

StackOverflow https://stackoverflow.com/questions/19855253

Pergunta

Eu tenho um formulário com o primeiro nome, o último nome, a idade e o sexo. Agora, como faço para inserir dados no banco de dados de Berkeley com Python? Eu sou realmente novo neste tipo de banco de dados. A maioria dos bancos de dados possui as consultas SQL para se associar e um cursor para obter e buscar dados. Mas, no caso de Berkeley, não existe tal.

Eu tenho lendo sobre Berkeleys DB, mas não estou entendendo. Qualquer ajuda é apreciada

Estou usando o Python 2.5

Como posso integrar esses dados que frequentam o formulário em Berkeley DB ??

Há algum erro de erro quando eu executo no 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"
Foi útil?

Solução

Você lê e escreve exatamente como um dicionário.

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

No entanto, as lojas Berkeley DB apenas pares de seqüências de chaves/valores, então talvez não seja isso que você realmente precisa se deseja armazenar esses valores para várias entradas diferentes. Se nenhum outro idioma usará esse arquivo de banco de dados, talvez você possa usar o módulo Shelve para armazenar ditos em conserva. Se você precisar ser fácil para os outros usarem, poderá serializar seus dados de formulário como JSON. Algo assim:

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

Mas, francamente, isso começa a parecer cada vez mais um anti-padronização e, a menos que você esteja absolutamente restrito ao uso de Berkeley DB por algum motivo, você não deve fazer dessa maneira. Você deve estar usando o SQLite para isso.

Outras dicas

Dos documentos:

Python Docs Berkeley- Veja 'Put'

#include <db.h>

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

O método db-> put () armazena pares de chave/dados no banco de dados. O comportamento padrão da função db-> put () é inserir o novo par de teclas/dados, substituindo qualquer chave anteriormente existente se as duplicatas não forem permitidas ou adicionando um item de dados duplicado se as duplicatas forem permitidas. Se o banco de dados suportar duplicatas, o método db-> put () adicionará o novo valor de dados no final do conjunto duplicado. Se o banco de dados suportar duplicatas classificadas, o novo valor de dados será inserido no local classificado correto.

Documentos

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