フォームフィールドを介してPythonを使用してBerkeleys DBにデータを挿入します[閉じた

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

質問

FirstName、LastName、Age、Fenderのフォームがあります。次に、Pythonを使用してバークレー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'

ただし、Berkeley DBはキー/バリュー文字列のペアのみを保存しているため、いくつかの異なるエントリにそれらの値を保存する場合、それは本当に必要なものではないかもしれません。他の言語がそのDBファイルを使用しない場合は、Sheleveモジュールを使用してピクルドディクトを保存することができます。他の人が簡単に使用できるようにする必要がある場合は、フォームデータを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