אובייקטים של נתונים ב-Datastore נקראים ישויות, וכל אחת מהן מסווגת תחת סוג מסוים לצורך שאילתות. לדוגמה, אם אתם כותבים אפליקציה לניהול משאבי אנוש, יכול להיות שתייצגו כל עובד באמצעות ישות מסוג Employee. שימו לב שערכי הנתונים של הישות הם בצורה של
properties.
מידע נוסף על ישויות זמין במאמרי העזרה בנושא נתיבי אב ועסקאות.
יצירת ישויות והגדרת מאפיינים
יוצרים ישות ומגדירים אותה באמצעות קריאה לשיטת הבנאי של מחלקת המודל שלה. במאמר יצירה ושימוש במחלקות של מודל ישויות מוסבר איך ליצור מחלקה של מודל ישויות.
בדוגמה הבאה מוצג אופן ההפעלה של בנאי מחלקת מודל עם ארגומנטים של מילות מפתח:
הקוד הזה יוצר אובייקט בזיכרון הראשי של התוכנית. עם זאת, חשוב לזכור שהישות נעלמת כשהתהליך מסתיים, ולכן צריך גם לשמור את הישות ב-מאגר נתונים באמצעות קריאה ל-put(), באופן הבא:
שימו לב שהפעולה הזו מחזירה מפתח שאפשר להשתמש בו כדי לאחזר את הישות מ-Datastore בהמשך.
מגדירים מאפיינים באחת מהדרכים הבאות:
- מציינים את המאפיינים של הישות בבנאי באמצעות ארגומנטים של מילות מפתח:
- הגדרת מאפיינים באופן ידני אחרי יצירת הישות:
- אפשר להשתמש בשיטת הנוחות
populate()כדי להגדיר כמה מאפיינים בפעולה אחת:
בכל דרך שתבחרו להגדיר את מאפייני הישות, סוגי המאפיינים (במקרה הזה, StringProperty ו-IntegerProperty) יאכפו בדיקת סוגים.
לדוגמה:
...
אחזור ישויות ממפתחות
אם יש לכם מפתח של ישות, אתם יכולים לאחזר את הישות מ-Datastore:
השיטות Key kind() ו-id() מאחזרות את סוג הישות ואת המזהה שלה מהמפתח:
אפשר גם להשתמש במפתח של ישות כדי לקבל מחרוזת מקודדת שמתאימה להטמעה בכתובת URL:
התוצאה תהיה דומה ל-agVoZWxsb3IPCxIHQWNjb3VudBiZiwIM, ואפשר יהיה להשתמש בה בהמשך כדי לשחזר את המפתח ולאחזר את הישות המקורית:
שימו לב שהמחרוזת שמתאימה לכתובת URL נראית מוצפנת, אבל היא לא מוצפנת! אפשר לפענח אותו בקלות כדי לשחזר את סוג הישות והמזהה המקוריים:
key = Key(urlsafe=url_string) kind_string = key.kind() ident = key.id()
אם אתם משתמשים במפתחות כאלה שמתאימים לכתובות URL, אל תשתמשו במידע אישי רגיש כמו כתובות אימייל כמזהי ישויות. פתרון אפשרי הוא שימוש בגיבוב של הנתונים הרגישים כמזהה. ההגדרה הזו מונעת מצדדים שלישיים, שיכולים לראות את המפתחות המוצפנים, להשתמש בהם כדי לאסוף כתובות אימייל. עם זאת, היא לא מונעת מהם ליצור באופן עצמאי גיבוב משלהם של כתובת אימייל מוכרת ולהשתמש בו כדי לבדוק אם הכתובת הזו קיימת במאגר הנתונים.
עדכון ישויות
כדי לעדכן ישות קיימת, מאחזרים אותה ממאגר הנתונים, משנים את המאפיינים שלה ומאחסנים אותה שוב:
במקרה הזה אפשר להתעלם מהערך שמוחזר על ידי put(), כי מפתח של ישות לא משתנה כשמעדכנים אותה.
מחיקת ישויות
כשאין יותר צורך בישות, אפשר להסיר אותה מ-Datastore באמצעות שיטת delete() של המפתח:
חשוב לדעת: זו פעולה על המפתח, ולא על הישות עצמה. היא תמיד מחזירה None.
מחיקת ישויות בכמות גדולה
אם אתם צריכים למחוק מספר גדול של ישויות, מומלץ להשתמש ב-Dataflow כדי למחוק ישויות בכמות גדולה.
שימוש בפעולות גורפות
אפשר לעבד אוסף של ישויות או מפתחות בקריאה אחת במקום לעבד אותם בנפרד בקריאות נפרדות, למשל בתוך לולאה. התוצאה היא קריאה יחידה של פרוצדורה מרוחקת (RPC) עבור הקבוצה, במקום קריאת RPC נפרדת לכל ישות.
בדוגמה הבאה אפשר לראות איך עושים את זה:
בדוגמת הקוד שלמעלה, מעבירים רשימה של אובייקטים של מפתחות אל ndb.get_multi כדי לאחזר כמה ישויות באצווה. הפונקציה ndb.get_multi מחזירה רשימה של אובייקטים של ישויות, עם ערכים של None למפתחות שאין להם ישות תואמת ב-Datastore. השגת הישויות בדרך הזו מובילה לפחות קריאות ל-Datastore עבור כל האצווה. (מספר השיחות בכל קבוצה תלוי בהגדרות של גודל הקבוצה).