使用python将表单字段中的数据插入到Berkeleys数据库中

时间:2013-11-08 09:12:15

标签: python database berkeley-db bsddb

我有一个包含FirstName,LastName,Age和Gender的表单。现在如何使用python将数据插入Berkeley数据库?我真的很喜欢这种数据库。 大多数数据库都有要关联的sql查询和要获取和获取数据的游标。但在伯克利的情况下,没有这样的。

我已经阅读了有关Berkeleys db的内容,但我没有得到它。任何人的帮助表示赞赏

我正在使用Python 2.5

如何整合从表单到Berkeley db ??

的这些数据

我在服务器上运行时出现了一些错误:

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"

2 个答案:

答案 0 :(得分:1)

来自文档:

Python Docs Berkeley- see 'put'

#include <db.h>

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

DB-&gt; put()方法将键/数据对存储在数据库中。 DB-&gt; put()函数的默认行为是输入新的密钥/数据对,如果不允许重复,则替换任何先前存在的密钥,或者如果允许重复,则添加重复的数据项。如果数据库支持重复,则DB-&gt; put()方法会在重复集的末尾添加新数据值。如果数据库支持已排序的重复项,则会将新数据值插入正确的排序位置。

Docs

答案 1 :(得分:1)

你读取和写入它就像字典一样。

>>> 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文件,也许您可​​以使用shelve模块存储pickled 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}

但坦率地说,这看起来越来越像反模式,除非你出于某种原因绝对限制使用Berkeley DB,否则你不应该这样做。你应该使用sqlite。