Вставка данных через поля формы в DB Berkeleys с Python [закрыто

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

Вопрос

У меня есть форма с FirstName, Lastname, Age и полу. Теперь, как вставить данные в Беркли Б.Б. с Python? Я действительно новичок в такой базе данных. Большинство базы данных имеют запросы SQL, чтобы ассоциировать и курсор, чтобы получить и извлекать данные. Но в случае Беркли такого нет.

Я читаю о Berkeleys DB, но я не получаю его. Любая помощь ценится

Я использую Python 2.5

Как я могу интегрировать эти данные, которые составляют от формы в Беркли Б.Б.?

Есть некоторые ошибки, когда я работаю на сервере:

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

Код:

#!/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"
Это было полезно?

Решение

Вы читаете и пишете это точно как словарь.

>>> 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 хранит только пары строк ключей/значения, так что, возможно, это не то, что вам действительно нужно, если вы хотите сохранить эти значения для нескольких различных записей. Если ни один другой язык не будет использовать этот файл DB, возможно, вы можете использовать модуль Setve для хранения маринованных DICTS. Если вам нужно, чтобы другие были легко использовать, вы можете сериализовать данные своей формы как JSON. Что-то вроде этого:

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

Но, честно говоря, это начинает все больше и больше похоже на анти-паттерн, и если вы не ограничитесь использованием Беркли Д.Б. по какой-то причине, вы не должны делать это таким образом. Вы должны использовать SQLite для этого.

Другие советы

От документов:

Python Docs Berkeley- см. «Поставьте»

#include <db.h>

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

Метод db-> put () сохраняет пары ключей/данных в базе данных. Поведение по умолчанию функции db-> put () состоит в том, чтобы ввести новую пару ключей/данных, заменив любой ранее существующий ключ, если дубликаты запрещены, или добавление дубликата элемента данных, если разрешены дубликаты. Если база данных поддерживает дубликаты, метод db-> put () добавляет новое значение данных в конце дубликата набора. Если база данных поддерживает отсортированные дубликаты, новое значение данных вставляется в правильном отсортированном месте.

Док

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top