آموزش کلاس Field در MongoEngine

3 سال پیش
آموزش کلاس Field در MongoEngine

آموزش کلاس Field در MongoEngine

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش کلاس Field در MongoEngine خواهیم پرداخت.

پیشنهاد ویژه : پکیج آموزش پایتون مختص بازار کار

کلاس سند MongoEngine دارای یک یا چند ویژگی است. هر ویژگی یک شی از کلاس Field است. BaseField کلاس پایه یا انواع مختلف فیلد است. سازنده کلاس BaseField استدلال های زیر را دارد –

BaseField(db_field, required, default, unique, primary_key)

 

db_field نشان دهنده نام فیلد پایگاه داده است.

پارامتر مورد نیاز تصمیم می گیرد که آیا برای این قسمت مقدار لازم است یا خیر ، پیش فرض نادرست است.

پارامتر پیش فرض شامل مقدار پیش فرض این قسمت است

پارامتر منحصر به فرد به طور پیش فرض نادرست است. اگر می خواهید این قسمت برای هر سند دارای ارزش منحصر به فردی باشد ، روی true تنظیم کنید.

پارامتر basic_key به طور پیش فرض به false می رود. True این قسمت را کلید اصلی می کند.

تعدادی کلاس Field وجود دارد که از BaseField مشتق شده اند.

فیلدهای عددی

سازنده های فیلد IntField (عدد صحیح ۳۲ بیتی) ، LongField (عدد صحیح ۶۴ بیتی) ، FloatField (شماره نقطه شناور) دارای پارامترهای min_value و max_value هستند.

کلاس DecimalField نیز وجود دارد. مقدار شی this این فیلد شناور است که می توان دقت آن را مشخص کرد. آرگومان های زیر برای کلاس DecimalField تعریف شده است –

DecimalField(min_value, max_value, force_string, precision, rounding)
min_value حداقل مقدار قابل قبول را مشخص می کند
max_value  حداکثر مقدار فیلد را می تواند تعیین کند
force_string  اگر درست باشد ، مقدار این قسمت به عنوان یک رشته ذخیره می شود
precision نمایش شناور را به تعداد ارقام محدود می کند
rounding به صورت ثابت های از پیش تعریف شده زیر ، اعشاری گرد می شود. RUND_CEILING (به سمت Infinity) اعشاری. RUND_DOWN (به سمت صفر) اعشاری. RUND_FLOOR (به سمت – نامعین بودن) اعشاری. RUND_HALF_DOWN (به نزدیکترین پیوندهایی که به سمت صفر می روند) اعشاری. RUND_HALF_EVEN (به نزدیکترین با کراوات ها به نزدیکترین عدد صحیح می روند) اعشاری .ROUND_HALF_UP (نزدیکترین کراوات هایی که از صفر دور می شوند) اعشاری. RUND_UP (دور از صفر) اعشاری. RUND_05UP (دور از صفر اگر آخرین رقم پس از گرد کردن به سمت صفر ۰ یا ۵ باشد ؛ در غیر این صورت به سمت صفر)

فیلدهای متن

شی StringField می تواند هر مقدار Unicode را ذخیره کند. می توانید min_length و max_length رشته را در سازنده مشخص کنید. شیF URLField یک StringField است که می تواند ورودی را به عنوان URL تأیید کند. EmailField رشته را به عنوان نمایندگی ایمیل معتبر تأیید می کند.

StringField(max-length, min_length)
URLField(url_regex)
EmailField(domain_whiltelist, allow_utf8_user, allow_ip_domain)

 

آرگومان domain_whitelist شامل لیستی از دامنه های نامعتبر است که شما از آنها پشتیبانی نمی کنید. اگر روی True تنظیم شود ، پارامتر allow_utf8_user به رشته اجازه می دهد تا شامل نویسه های UTF8 به عنوان بخشی از ایمیل باشد. پارامتر allow_ip_domain به طور پیش فرض نادرست است ، اما اگر درست باشد ، می تواند یک آدرس IPV4 یا IPV6 معتبر باشد.

مثال زیر از فیلدهای عددی و رشته ای استفاده می کند –

from mongoengine import *
connect('studentDB')
class Student(Document):
   studentid = StringField(required=True)
   name = StringField()
   age=IntField(min_value=6, max-value=20)
   percent=DecimalField(precision=2)
   email=EmailField()
s1=Student()
s1.studentid='001'
s1.name='Mohan Lal'
s1.age=20
s1.percent=75
s1.email='mohanlal@gmail.com'
s1.save()

 

هنگامی که کد بالا اجرا می شود ، مجموعه دانش آموزان سندی را به صورت زیر نشان می دهد –

Document

ListField

این نوع فیلد هر فیلد استاندارد را می پیچد، بنابراین اجازه می دهد تا از چندین شی به عنوان یک لیست لیست در یک پایگاه داده استفاده شود. این قسمت را می توان با ReferenceField برای پیاده سازی روابط یک تا چند مورد استفاده کرد.

کلاس سند دانشجویی از مثال بالا به صورت زیر تغییر می یابد –

from mongoengine import *
connect('studentDB')
class Student(Document):
   studentid = StringField(required=True)
   name = StringField(max_length=50)
   subjects = ListField(StringField())
s1=Student()
s1.studentid='A001'
s1.name='Mohan Lal'
s1.subjects=['phy', 'che', 'maths']
s1.save()

 

سند اضافه شده در قالب JSON به شرح زیر نشان داده شده است –

{
"_id":{"$oid":"5ea6a1f4d8d48409f9640319"},
"studentid":"A001",
"name":"Mohan Lal",
"subjects":["phy","che","maths"]
}

 

 

DictField

یک شی از کلاس DictField یک شی فرهنگ لغت Python را ذخیره می کند. در قسمت پایگاه داده مربوطه نیز ، این ذخیره می شود.

به جای ListField در مثال بالا ، نوع آن را به DictField تغییر می دهیم.

from mongoengine import *
connect('studentDB')
class Student(Document):
   studentid = StringField(required=True)
   name = StringField(max_length=50)
   subjects = DictField()
s1=Student()
s1.studentid='A001'
s1.name='Mohan Lal'
s1.subjects['phy']=60
s1.subjects['che']=70
s1.subjects['maths']=80
s1.save()

 

سند موجود در پایگاه داده به شرح زیر است:

{
"_id":{"$oid":"5ea6cfbe1788374c81ccaacb"},
"studentid":"A001",
"name":"Mohan Lal",
"subjects":{"phy":{"$numberInt":"60"},
            "che":{"$numberInt":"70"},
            "maths":{"$numberInt":"80"}
            }
}

 

 

ReferenceField

یک سند MongoDB می تواند با استفاده از این نوع قسمت ها ، مرجع را به سند دیگری ذخیره کند. با این روش می توانیم join را مانند RDBMS پیاده سازی کنیم. یک سازنده ReferenceField از نام کلاس سند دیگر به عنوان پارامتر استفاده می کند.

class doc1(Document):
   field1=StringField()
class doc2(Document):
   field1=StringField()
   field2=ReferenceField(doc1)

 

در مثال زیر ، پایگاه داده StudentDB شامل دو کلاس مستند، دانشجو و معلم است. سند کلاس Student حاوی ارجاع به یک شی کلاس معلم است.

from mongoengine import *
connect('studentDB')
class Teacher (Document):
   tid=StringField(required=True)
   name=StringField()
class Student(Document):
   sid = StringField(required=True)
   name = StringField()
   tid=ReferenceField(Teacher)

t1=Teacher()
t1.tid='T1'
t1.name='Murthy'
t1.save()

s1=Student()
s1.sid='S1'
s1.name='Mohan'
s1.tid=t1
s1.save()

 

کد بالا را اجرا کنید و نتیجه را در Compass GUI تأیید کنید. دو مجموعه مربوط به دو کلاس سند در پایگاه داده StudentDB ایجاد می شود.

سند معلم اضافه شده به شرح زیر است –

{
"_id":{"$oid":"5ead627463976ea5159f3081"},
"tid":"T1",
"name":"Murthy"
}

 

سند دانشجو مطالب را به صورت زیر نشان می دهد –

{
"_id":{"$oid":"5ead627463976ea5159f3082"},
"sid":"S1",
"name":"Mohan",
"tid":{"$oid":"5ead627463976ea5159f3081"}
}

 

توجه داشته باشید که ReferenceField در سند دانش آموز _ سند مربوط به معلم را ذخیره می کند. در صورت دسترسی ، شی Student به طور خودکار به یک مرجع تبدیل می شود و در صورت دسترسی به شی Teacher مربوطه ، از آن ارجاع داده می شود.

برای افزودن مرجع به سندی که تعریف می شود ، از “self” به جای کلاس سند دیگر به عنوان آرگومان به ReferenceField استفاده کنید. ممکن است ذکر شود که استفاده از ReferenceField ممکن است عملکرد ضعیفی را در مورد بازیابی اسناد ایجاد کند.

سازنده ReferenceField همچنین دارای یک آرگومان اختیاری به عنوان reverse_delete_rule است. مقدار آن تعیین می کند که اگر سند ارجاع شده حذف شود چه باید کرد.

مقادیر ممکن به شرح زیر است –

  • DO_NOTHING (0) – کاری انجام ندهید (پیش فرض).
  • NULLIFY (1) – مرجع null را به روز می کند.
  • CASCADE (2) – اسناد مرتبط با مرجع را حذف می کند.
  • DENY (3) – از حذف شی مرجع جلوگیری کنید.
  • PULL (4) – مرجع را از ListField منابع استخراج کنید

با استفاده از لیست منابع می توانید رابطه یک تا چند را پیاده سازی کنید. با فرض اینکه یک سند دانشجویی باید با یک یا چند سند معلم مرتبط باشد ، کلاس Student باید دارای موارد ListField of ReferenceField باشد.

from mongoengine import *
connect('studentDB')
class Teacher (Document):
tid=StringField(required=True)
name=StringField()
class Student(Document):
   sid = StringField(required=True)
   name = StringField()
   tid=ListField(ReferenceField(Teacher))
t1=Teacher()
t1.tid='T1'
t1.name='Murthy'
t1.save()
t2=Teacher()
t2.tid='T2'
t2.name='Saxena'
t2.save()
s1=Student()
s1.sid='S1'
s1.name='Mohan'
s1.tid=[t1,t2]
s1.save()

 

با تأیید نتیجه کد فوق در قطب نما ، سند دانشجویی را با دو مرجع معلم پیدا خواهید کرد –

Teacher Collection
{
"_id":{"$oid":"5eaebcb61ae527e0db6d15e4"},
"tid":"T1","name":"Murthy"
}
{
"_id":{"$oid":"5eaebcb61ae527e0db6d15e5"},
"tid":"T2","name":"Saxena"
}
Student collection
{
"_id":{"$oid":"5eaebcb61ae527e0db6d15e6"},
"sid":"S1","name":"Mohan",
"tid":[{"$oid":"5eaebcb61ae527e0db6d15e4"},{"$oid":"5eaebcb61ae527e0db6d15e5"}]
}

 

DateTimeField

نمونه ای از کلاس DateTimeField به داده ها در قالب تاریخ در پایگاه داده MongoDB اجازه می دهد. MongoEngine برای تجزیه و تحلیل داده ها در قالب تاریخ مناسب به دنبال کتابخانه Python-DateUtil است. اگر در نصب فعلی موجود نباشد ، تاریخ با استفاده از تابع time.strptime () ساخته شده است. مقدار پیش فرض فیلد از این نوع نمونه زمان فعلی است.

DynamicField

با این زمینه می توان داده های مختلف و متفاوتی را مدیریت کرد. این نوع فیلدها بصورت داخلی توسط کلاس DynamicDocument استفاده می شود.

ImageField

این نوع فیلدها مربوط به فیلدی در سند است که می تواند یک فایل تصویری را ذخیره کند. سازنده این کلاس می تواند پارامترهای اندازه و thumbnail_size (هر دو از نظر اندازه پیکسل) را بپذیرد.

 

منبع.

لیست جلسات قبل آموزش MongoEngine

  1. آموزش MongoEngine
  2. آموزش MongoDB در MongoEngine
  3. آموزش قطب نما MongoDB در MongoEngine
  4. آموزش نگاشت کننده اسناد شی در MongoEngine
  5. آموزش نصب MongoEngine
  6. آموزش اتصال به پایگاه داده MongoDB در MongoEngine
  7. آموزش کلاس Document در MongoEngine
  8. آموزش طرح پویا در MongoEngine
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه