Frage

Ich habe eine Form mit FirstName, Lastname, Alter und Geschlecht. Wie füge ich nun Daten mit Python in die Berkeley DB ein? Ich bin wirklich neu in dieser Art Datenbank. Die meisten Datenbank haben die SQL -Abfragen zum Assoziieren und einen Cursor, um Daten zu erhalten und abzurufen. Aber im Falle von Berkeley gibt es keine solche.

Ich habe über Berkelys DB gelesen, aber ich verstehe es nicht. Jeder Hilfe wird geschätzt

Ich benutze Python 2.5

Wie kann ich diese Daten integrieren, die von Form in Berkeley DB entgehen?

Es gibt einen Fehler, der auf dem Server ausgeführt wird:

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"
War es hilfreich?

Lösung

Sie lesen und schreiben genau wie ein Wörterbuch darauf.

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

Berkeley DB speichert jedoch nur Paare von Schlüssel-/Wertzeichenfolgen. Vielleicht brauchen Sie das nicht wirklich, wenn Sie diese Werte für verschiedene Einträge speichern möchten. Wenn keine andere Sprache diese DB -Datei verwendet, können Sie möglicherweise das Regal -Modul verwenden, um eingelegte Diktate zu speichern. Wenn Sie es für andere einfach haben müssen, können Sie Ihre Formdaten als JSON serialisieren. Etwas wie das:

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

Aber ehrlich gesagt sieht dies immer mehr wie ein Anti-Muster aus, und wenn Sie nicht absolut darauf beschränkt sind, Berkeley DB aus irgendeinem Grund zu verwenden, sollten Sie es nicht so tun. Dafür sollten Sie SQLite verwenden.

Andere Tipps

Aus den Dokumenten:

Python Docs Berkeley- Siehe 'Put'

#include <db.h>

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

Die Methode db-> put () speichert Schlüssel-/Datenpaare in der Datenbank. Das Standardverhalten der Funktion db-> put () besteht darin, das neue Schlüssel-/Datenpaar einzugeben, einen zuvor vorhandenen Schlüssel zu ersetzen, wenn Duplikate nicht zugelassen werden, oder ein doppelter Datenelement hinzuzufügen, wenn Duplikate zulässig sind. Wenn die Datenbank Duplikate unterstützt, fügt die DB-> Put () -Methode den neuen Datenwert am Ende des doppelten Satzes hinzu. Wenn die Datenbank sortierte Duplikate unterstützt, wird der neue Datenwert am richtigen Sortierort eingefügt.

Dokumente

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top