כל מה שאתה צריך לדעת על פייתון ומפות יחסי אובייקטים

כל מה שאתה צריך לדעת על פייתון ומפות יחסי אובייקטים

יכול להיות ששמעת על מיפוי יחסי אובייקטים (ORM). אולי אפילו השתמשת באחד, אבל מה הם בדיוק? ואיך אתה משתמש בהם ב- Python?





להלן כל מה שאתה צריך לדעת על ORMs ו- Python.





מהו ORM?

מיפוי קשרי אובייקטים (ORM) היא טכניקת תכנות המשמשת לגישה למסד נתונים. הוא חושף את מסד הנתונים שלך לסדרה של אובייקטים. אינך צריך לכתוב פקודות SQL כדי להוסיף או לאחזר נתונים, אתה משתמש בסדרה של תכונות ושיטות המחוברות לאובייקטים.





זה אולי נשמע מורכב ומיותר, אבל הם יכולים לחסוך לך הרבה זמן ולעזור לשלוט בגישה למסד הנתונים שלך.

הנה דוגמא. אמור שבכל פעם שאתה מכניס סיסמה למסד הנתונים שלך אתה רוצה לעשות hash, כפי שמוסבר באבטחת סיסמאות האתר. זו לא בעיה למקרי שימוש פשוטים --- אתה עושה את החישוב לפני ההכנסה. אבל מה אם אתה צריך להכניס רשומה במקומות רבים בקוד? מה אם מתכנת אחר יכנס לשולחן שלך ואתה לא יודע לגביו?



על ידי שימוש ב- ORM, אתה יכול לכתוב קוד כדי לוודא שבכל פעם ובכל מקום שאליו תיגש כל שורה או שדה במסד הנתונים שלך, הקוד השני המותאם אישית שלך יבוצע תחילה.

הדבר פועל גם כ'מקור אמת אחד '. אם אתה רוצה לשנות חישוב מותאם אישית, עליך לשנות אותו רק במקום אחד, לא במספר. אפשר לבצע עם רבים מהעקרונות הללו תכנות מונחה עצמים (OOP) ב- Python , אך ORM פועלים במקביל לעקרונות OOP לשליטה בגישה למסד נתונים.





ישנם דברים מסוימים שיש לשים לב אליהם בעת שימוש ב- ORM, וישנן נסיבות שבהן ייתכן שלא תרצה להשתמש באחד מהן, אך בדרך כלל הן נחשבות כדבר טוב במיוחד בבסיס קוד גדול.

ORMs בפייתון באמצעות SQLAlchemy

כמו משימות רבות ב- Python, מהר יותר וקל יותר לייבא מודול מאשר לכתוב משלך. כמובן שאפשר לכתוב ORM משלכם, אבל למה להמציא מחדש את הגלגל?





הדוגמאות הבאות כולן משתמשות SQLAchemy , ORM פופולרי לפייתון, אך רבים מהעקרונות חלים ללא קשר ליישום.

הגדרת פייתון עבור SQLAlchemy

לפני שתקפוץ ישר, תצטרך להתקין את המחשב שלך לפיתוח Python בעזרת SQLAlchemy.

יהיה עליך להשתמש ב- Python 3.6 כדי לעקוב אחר דוגמאות אלה. בעוד שגרסאות ישנות יותר יפעלו, הקוד להלן יזדקק לשינוי כלשהו לפני שהוא יפעל. לא בטוח לגבי ההבדלים? השאלות הנפוצות שלנו ב- Python מכסות את כל ההבדלים.

לפני קידוד, עליך להגדיר סביבת Python, שתמנע בעיות עם חבילות Python מיובאות אחרות.

תוודא שיש לך PIP, מנהל החבילות של פייתון מותקן, שמגיע עם רוב הגרסאות המודרניות של פייתון.

ברגע שאתה מוכן ללכת, תוכל להתחיל בהכנת SQLAlchemy. מתוך סביבת ה- Python שלך בשורת הפקודה, התקן את SQLAlchemy עם התקנת pip פקודה:

pip install SQLAlchemy-1.2.9

ה 1.2.9 הוא מספר הגרסה. אתה יכול לעזוב את זה כדי לקבל את החבילה העדכנית ביותר, אך מומלץ לפרט. אינך יודע מתי מהדורה חדשה עשויה לשבור את הקוד הנוכחי שלך.

עכשיו אתה מוכן להתחיל לקודד. ייתכן שיהיה עליך להכין את מסד הנתונים שלך כדי לקבל חיבור Python, אך הדוגמאות הבאות כולן משתמשות ב- SQLite מסד הנתונים שנוצר בתוך הזיכרון למטה.

דוגמניות ב- SQLAlchemy

אחד ממרכיבי המפתח של ORM הוא א דֶגֶם . זוהי מחלקת פייתון המתארת ​​כיצד צריכה להיראות שולחן וכיצד היא צריכה לפעול. זוהי גרסת ה- ORM של צור טבלה משפט ב- SQL. אתה צריך דגם לכל טבלה במסד הנתונים שלך.

פתח את עורך הטקסט או IDE המועדף עליך, וצור קובץ חדש בשם test.py . הזן את קוד ההתחלה הזה, שמור את הקובץ והפעל אותו:

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
engine = create_engine('sqlite://') # Create the database in memory
Base.metadata.create_all(engine) # Create all the tables in the database

הקוד הזה עושה מספר דברים. הייבוא ​​נחוץ כדי שפייתון יבין היכן למצוא את המודולים של SQLAlchemy שהוא צריך. הדגמים שלך ישתמשו ב- בסיס_ הצהרתי מאוחר יותר, והוא מגדיר את כל הדגמים החדשים לעבודה כצפוי.

ה צור_מנוע שיטה יוצרת חיבור חדש למסד הנתונים שלך. אם כבר יש לך מסד נתונים, יהיה עליך לשנות sqlite: // ל- URI מסד הנתונים שלך. כפי שהוא, קוד זה ייצור מסד נתונים חדש בזיכרון בלבד. מסד הנתונים נהרס לאחר שהקוד שלך מסיים את ביצועו.

סוף - סוף, ה ליצור_כל method יוצר את כל הטבלאות המוגדרות במצבים שלך במסד הנתונים שלך. מכיוון שטרם הגדרת דגמים, שום דבר לא יקרה. קדימה, הפעל קוד זה כדי לוודא שאין לך בעיות או שגיאות כתיב.

בואו נכין מודל. הוסף ייבוא ​​נוסף לראש הקובץ שלך:

from sqlalchemy import Column, Integer, String

זה מייבא את טור , מספר שלם , ו חוּט מודולים מ- SQLAlchemy. הם מגדירים כיצד פועלות טבלאות, שדות, עמודות וסוגי נתונים של מסד הנתונים.

מתחת ל בסיס_ הצהרתי , צור את מחלקת הדוגמאות שלך:

class Cars(Base):
__tablename__ = 'cars'
id = Column(Integer, primary_key=True)
make = Column(String(50), nullable=False)
color = Column(String(50), nullable=False)

דוגמה פשוטה זו משתמשת במכוניות, אך הטבלאות שלך עשויות להכיל נתונים כלשהם.

כל כיתה חייבת לרשת בסיס . שם טבלת מסד הנתונים שלך מוגדר ב- __שם שולחן__ . זה צריך להיות זהה לשם הכיתה, אבל זו רק המלצה, ושום דבר לא יישבר אם הם לא יתאימו.

לבסוף, כל עמודה מוגדרת כמשתנה פייתון בתוך המחלקה. נעשה שימוש בסוגי נתונים שונים, ו- מפתח ראשי התכונה אומרת ל- SQLAlchemy ליצור את תְעוּדַת זֶהוּת העמודה כמפתח ראשי.

קדימה, הוסף ייבוא ​​אחרון, הפעם עבור זר מפתח מודול. הוסף זאת לצד שלך טור יְבוּא:

from sqlalchemy import Column, ForeignKey, Integer, String

כעת צור מחלקת דגמים שנייה. כיתה זו נקראת בעלי רכב , ומאחסן פרטי בעלים של מכוניות ספציפיות המאוחסנות ב מכוניות שולחן:

class CarOwners(Base):
__tablename__ = 'carowners'
id = Column(Integer, primary_key=True)
name = Column(String(50), nullable=False)
age = Column(Integer, nullable=False)
car_id = Column(Integer, ForeignKey('cars.id'))
car = relationship(Cars)

ישנן מספר תכונות חדשות שהוצגו כאן. ה car_id השדה מוגדר כמפתח זר. הוא מקושר ל תְעוּדַת זֶהוּת בתוך ה מכוניות שולחן. שימו לב כיצד נעשה שימוש בשם הטבלה באותיות קטנות, המבוסס על שם המחלקה באותיות גדולות.

לבסוף, תכונה של אוטו מוגדר כ- מערכת יחסים . זה מאפשר לדגם שלך לגשת ל- מכוניות שולחן באמצעות משתנה זה. זה מודגם להלן.

אם תפעיל את הקוד הזה כעת, תראה ששום דבר לא קורה. הסיבה לכך היא שעוד לא אמרת לו לעשות משהו בולט.

אובייקטים ב- SQLAlchemy

כעת, לאחר שהמודלים שלך נוצרים, תוכל להתחיל לגשת לאובייקטים ולקרוא ולכתוב נתונים. מומלץ למקם את ההיגיון שלך במחלקה ובקובץ משלו, אך לעת עתה הוא יכול להישאר לצד הדגמים.

כתיבת נתונים

בדוגמה זו, עליך להכניס נתונים למסד הנתונים לפני שתוכל לקרוא אותו. אם אתה משתמש במסד נתונים קיים, ייתכן שיש לך כבר נתונים. כך או כך, זה עדיין מאוד שימושי לדעת להכניס נתונים.

יכול להיות שאתה רגיל לכתוב לְהַכנִיס הצהרות ב- SQL. SQLAlchemy מטפלת בזה עבורך. הנה איך להכניס שורה אחת לתוך מכוניות דֶגֶם. התחל ביבוא חדש עבור יוצר הפעלות :

from sqlalchemy.orm import sessionmaker

זה נחוץ כדי ליצור את מוֹשָׁב ו DBSession אובייקטים המשמשים לקריאה וכתיבה של נתונים:

DBSession = sessionmaker(bind=engine)
session = DBSession()

עכשיו שים את זה מתחת שלך ליצור_כל הַצהָרָה:

car1 = Cars(
make='Ford',
color='silver'
)
session.add(car1)
session.commit()

בואו נשבור את הקוד הזה. המשתנה מכונית 1 מוגדר כאובייקט המבוסס על מכוניות דֶגֶם. צורתו וצבעו נקבעים כפרמטרים. זה כמו להגיד 'עשה לי מכונית, אבל אל תכתוב אותה למאגר המידע עדיין'. מכונית זו קיימת בזיכרון אך ממתינה להיכתב.

הוסף את המכונית למפגש עם session.add ולאחר מכן כתוב אותו למסד הנתונים באמצעות session.commit .

כעת נוסיף בעלים:

owner1 = CarOwners(
name='Joe',
age='99',
car_id=(car1.id)
)
session.add(owner1)
session.commit()

קוד זה כמעט זהה לתוספת הקודמת עבור מכוניות דֶגֶם. ההבדל העיקרי כאן הוא זה car_id הוא מפתח זר ולכן צריך מזהה שורה שקיים בטבלה השנייה. גישה זו ניתנת באמצעות car1.id תכונה.

אינך צריך לשאול את מסד הנתונים או להחזיר מזהים, מכיוון ש- SQLAlchemy מטפל בזה עבורך (כל עוד אתה מבצע את הנתונים תחילה).

קריאת נתונים

לאחר שכתבת כמה נתונים, תוכל להתחיל לקרוא אותם בחזרה. כך תוכל לשאול את מכוניות ו בעלי רכב שולחנות:

result = session.query(Cars).all()

זה כל כך פשוט. על ידי שימוש ב שאילתא השיטה הנמצאת ב מוֹשָׁב , אתה מציין את הדגם ולאחר מכן משתמש ב את כל שיטה לאחזור כל התוצאות. אם אתה יודע שתהיה רק ​​תוצאה אחת, תוכל להשתמש ב ראשון שיטה:

result = session.query(Cars).first()

לאחר שתחקר את המודל ושמרת את התוצאות שהוחזרו במשתנה, תוכל לגשת לנתונים באמצעות האובייקט:

print(result[0].color)

זה מדפיס את הצבע 'כסף', מכיוון שרשומה זו היא השורה הראשונה. אם תרצה, תוכל להחליף את אובייקט התוצאה.

כפי שהגדרת את מערכת היחסים במודל שלך, ניתן לגשת לנתונים בטבלאות הקשורות מבלי לציין צירוף:

result = session.query(CarOwners).all()
print(result[0].name)
print(result[0].car.color)

זה עובד מכיוון שהמודל שלך מכיל פרטים על מבנה הטבלה שלך ועל אוטו התכונה הוגדרה כקישור ל- מכוניות שולחן.

מה לא חשוב ב- ORMs?

הדרכה זו התייחסה רק ליסודות הבסיסיים, אך לאחר שהבנתם את העניינים, תוכלו להמשיך בנושאים המתקדמים. ישנם כמה חסרונות אפשריים ל- ORM:

  • עליך לכתוב את המודל שלך לפני שאפשר להפעיל שאילתות.
  • זה עוד תחביר חדש ללמוד.
  • זה עשוי להיות מורכב מדי לצרכים פשוטים.
  • אתה חייב להיות בעל עיצוב מסד נתונים טוב מלכתחילה.

נושאים אלה אינם בעיה גדולה בפני עצמם, אך הם דברים שצריך להיזהר מהם. אם אתה עובד עם מסד נתונים קיים, אתה עלול להיתפס.

אם אינך משוכנע ש- ORM הוא הכלי המתאים עבורך, הקפד לקרוא על פקודות חשובות של תוכנת SQL אמורות לדעת .

לַחֲלוֹק לַחֲלוֹק צִיוּץ אימייל האם כדאי לשדרג ל- Windows 11 באופן מיידי?

Windows 11 יגיע בקרוב, אך האם עליך לעדכן בהקדם האפשרי או לחכות מספר שבועות? בוא נגלה.

קרא הבא
נושאים קשורים
  • תִכנוּת
  • פִּיתוֹן
  • SQL
  • הדרכות קידוד
על הסופר ג'ו קוברן(136 מאמרים פורסמו)

ג'ו בוגר מדעי המחשב מאוניברסיטת לינקולן שבבריטניה. הוא מפתח תוכנה מקצועי, וכשהוא לא מטיס רחפנים או כותב מוזיקה, לעתים קרובות אפשר למצוא אותו מצלם או מפיק סרטונים.

כיצד להגדיר את חשבון Google כברירת מחדל
עוד מאת ג'ו קוברן

הירשם לניוזלטר שלנו

הצטרף לניוזלטר שלנו לקבלת טיפים, סקירות, ספרים אלקטרוניים בחינם ומבצעים בלעדיים!

לחצו כאן להרשמה