문제

FirstName, LastName, Age 및 Gender가있는 양식이 있습니다. 이제 Python과 함께 Berkeley DB에 데이터를 어떻게 삽입합니까? 나는 이런 종류의 데이터베이스를 처음 접했습니다. 대부분의 데이터베이스에는 SQL 쿼리가 연결되어 있고 커서가 데이터를 가져오고 가져 오는 커서가 있습니다. 그러나 버클리의 경우에는 그러한 것이 없습니다.

나는 Berkeleys DB에 대해 읽고 있지만 그것을 얻지 못하고 있습니다. 어떤 도움이든 감사합니다

Python 2.5를 사용하고 있습니다

양식에서 버클리 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"
도움이 되었습니까?

해결책

당신은 사전처럼 그것을 읽고 씁니다.

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

그러나 버클리 DB는 키/가치 문자열 쌍 만 저장하므로 여러 다른 항목에 해당 값을 저장하려면 실제로 필요한 것이 아닐 수도 있습니다. 다른 언어가 해당 DB 파일을 사용하지 않으면 Shelve 모듈을 사용하여 절인 작업을 저장할 수 있습니다. 다른 사람이 쉽게 사용할 수 있도록 필요한 경우 양식 데이터를 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}

그러나 솔직히 말해서, 이것은 점점 더 많은 반란처럼 보이기 시작하며, 어떤 이유로 버클리 DB를 사용하는 것이 절대적으로 제한되지 않는 한 그렇게해서는 안됩니다. 당신은 그것을 위해 sqlite를 사용해야합니다.

다른 팁

문서에서 :

Python Docs Berkeley- 'put'참조

#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