إدراج البيانات من خلال حقول النماذج في بيركليز ديسيبل مع بيثون [مغلق

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

سؤال

لدي نموذج مع FirstName ، LastName ، العمر والجنس. الآن كيف يمكنني إدراج البيانات في بيركلي دي بي مع بيثون؟ أنا جديد حقًا في قاعدة بيانات كيندا هذه. تحتوي معظم قاعدة البيانات على استعلامات SQL لربطها ومؤشر للحصول على البيانات وجلبها. ولكن في حالة بيركلي لا يوجد مثل هذا.

لقد قرأت عن بيركليز ديسيبل ، لكنني لا أحصل عليها. يتم تقدير أي مساعدة

أنا أستخدم بيثون 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 هذا ، فربما يمكنك استخدام وحدة الرفى لتخزين الديكتات المخللة. إذا كنت بحاجة إلى أن يكون من السهل على الآخرين استخدامها ، فيمكنك إجراء تسلسل بيانات النموذج الخاص بك باسم 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 لذلك.

نصائح أخرى

من المستندات:

بيثون مستندات بيركلي- انظر "وضع"

#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