Insertion des données via des champs de formulaire dans la DB de Berkeleys avec Python [fermé

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

Question

J'ai une forme avec FirstName, LastName, Age and Gender. Maintenant, comment insérer des données dans la DB de Berkeley avec Python? Je suis vraiment nouveau dans cette base de données. La plupart des bases de données ont les requêtes SQL à associer et un curseur pour obtenir et récupérer des données. Mais dans le cas de Berkeley, il n'y en a pas.

J'ai lu sur la base de données de Berkeleys, mais je ne comprends pas. Toute aide est appréciée

J'utilise Python 2.5

Comment puis-je intégrer ces données qui Comment de la forme dans Berkeley DB ??

Il y a une certaine erreur lorsque j'exécute sur le serveur:

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

Code:

#!/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"
Était-ce utile?

La solution

Vous lisez et écrivez-y exactement comme un dictionnaire.

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

Cependant, Berkeley DB stocke uniquement des paires de chaînes de clé / valeur, donc ce n'est peut-être pas ce dont vous avez vraiment besoin si vous voulez stocker ces valeurs pour plusieurs entrées différentes. Si aucune autre langue n'utilisera ce fichier DB, vous pouvez peut-être utiliser le module d'étagère pour stocker des dicts marinés. Si vous en avez besoin pour être facile à utiliser pour les autres, vous pouvez sérialiser vos données de formulaire en JSON. Quelque chose comme ça:

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

Mais franchement, cela commence à ressembler de plus en plus à un anti-motif, et à moins que vous ne soyez absolument limité à l'utilisation de Berkeley DB pour une raison quelconque, vous ne devriez pas le faire de cette façon. Vous devriez utiliser SQLite pour cela.

Autres conseils

Des documents:

Python docs berkeley- voir «mettre»

#include <db.h>

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

La méthode db-> put () stocke les paires de clés / données dans la base de données. Le comportement par défaut de la fonction db-> put () consiste à saisir la nouvelle paire de touches / données, de remplacer toute clé existante précédemment si les doublons sont refusés ou l'ajout d'un élément de données en double si les doublons sont autorisés. Si la base de données prend en charge les doublons, la méthode db-> put () ajoute la nouvelle valeur de données à la fin de l'ensemble en double. Si la base de données prend en charge les doublons triés, la nouvelle valeur de données est insérée au bon emplacement trié.

Docs

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top