
data.txt עם שם פרטי, שם משפחה וגיל בכל שורה, מופרדים בפסיקים.with open: הבלוק פותח את הקובץ, וכשיוצאים ממנו פייתון סוגרת אותו אוטומטית, בלי צורך ב-close.line.split(",") מחזיר רשימה, והכוכבית (*) פורשת אותה לפרמטרים של הקונסטרקטור של Person. כך אפשר לכתוב את הפירוק בשורה אחת במקום לגשת לכל איבר בנפרד.sqlite3.connect פותח קובץ מסד נתונים בשם data.sql ומחזיר אובייקט חיבור. מהחיבור מקבלים cursor, שמריץ את פקודות ה-SQL.DROP TABLE IF EXISTS מוחקת את הטבלה אם היא קיימת, כדי שהסקריפט יוכל לרוץ שוב בלי שגיאה. אחריה נוצרת טבלה בשם people עם השדות name ו-last name מסוג טקסט, ו-age מסוג מספר שלם.INSERT הוא פלייסהולדר, והערכים נשלחים בפרמטר נפרד, בסדר שבו הם מופיעים.commit: השינויים נכתבים קודם לזיכרון של מנוע SQLite, ורק הקריאה ל-commit כותבת אותם לקובץ.SELECT * FROM people מחזירה את כל השורות, ו-fetchall מחזיר אותן כרשימה של טאפלים.pip מאפשרת לעבוד מול MySQL. רק הגדרת החיבור והמיקום של המסד משתנים, והלוגיקה העיקרית נשארת פשוטה.הטקסט המלא של הדקות הראשונות בהרצאה «פייטון SQLite» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, בשיעור הזה אנחנו נדבר על SQLite שזה דאטאבייס אנחנו נכתוב סקריפט שמפרסר קובץ, מכניס את התוכן שלו לתוך דאטאבייס מסוג SQLite ולאחר מכן קורא את המידע משם ומדפיס אותו על המסך.
דבר ראשון נסביר מה זה SQLite אז SQLite זה דאטאבייס רלציוני, כלומר הוא מבוסס טבלאות כמו Microsoft SQL או MySQL מצד שני, הוא חינמי, והוא הרבה יותר קטן.
המטרה של SQLite זה לא להיות דאטאבייס של אתרי אינטרנט שאתם ניגשים אליהם לקבל מידע, אלא זהו דאטאבייס שאתם משתמשים בו הרבה, משתמשים בו בתוכנות קטנות לאחסן מידע.
למשל, כל מתכנתי האנדרואידים או כל מי שרוצה להיכנס לתחום תכנות האנדרואידים, אז הרבה אפליקציות שנמצאות בפלאפון שלנו, כל אחת מהן, אם המתכנת בחר בכך, שומרת את המידע בתוך דאטאבייס SQLite משלו.
ותוכנה אפילו יכולה להשתמש בכמה דאטאבייסים של SQLite. יותר מזה, תוכנות אחרות, כמו סקייפ למשל, גם שומרות את המידע בתוך SQLite.
קובץ שנמצא לוקאלית על המחשב, הקובץ הזה הוא נגיש לתוכנה, וזה לא כמו סרוויס שתוכנה אחרת ניגשת אליו, אלא הסקייפ עצמו שומר את כל ההיסטוריה של הצ'אטים ומי דיבר עם מי, באיזה שעה ולפני כמה זמן ומה הוא דיבר, הכל נשמר בתוך קובץ מסוג sqlite.
הביצועים של sqlite הם יחסית טובים, הוא מאוד טוב, הוא מאוד זריז, מבחינת מקום הזיכרון הוא תופס הרבה פחות. כמובן שמבחינת הביצועים שלו הוא לא מיועד להיות תחליף ל-MySQL, אלא השימוש שלו הוא אחר לתוכנות שרוצות לשמור מידע על התוכנה עצמה אז לפני שנתחיל את התרגיל
אנחנו נוריד איזשהו בראוזר קטן של sqlite שנותן לנו אופציה להסתכל בתוך הקבצים אז פשוט חיפשתי בגוגל sqlite browser נכנסתי ללינק הראשון ואני מוריד את הקובץ ונתקין אותו צ'יק צ'אק תוך כדי אני אכין קובץ טקסט שממנו אני ארצה שאותו אני ארצה לפרסר אז הדאטאבייס שלי יכיל שלוש עמודות, שם של בן אדם, שם משפחה של בן אדם וגיל של בן אדם.
אז בואו נכין את הקובץ. אז מוזס כהן, ארבעים, ג'ון, מת, שתים עשרה, תן, ניק, שלוש, ועוד אחד, דין, דין, דין עדין, בן שתים עשרה. ואת הקובץ הזה אני אשמור באותה תיקייה שבה אני שומר את כל הקבצים
של הפייתון בתוך הוורקספייס של אקליפס, נקרא לזה data.text ותכף בואו בינתיים נתקין את התוכנה שסיימנו להוריד, זה בינתיים נשים בצד, עם זה נוכל לפתוח את הקובץ אחרי שיצרנו אותו ולראות שבאמת יצרנו את הדברים.
פייתון מכילה תמיכה בילט אין ב-sqlite בעזרת מודול שנקרא sqlite 3. אז בואו נתחיל. דבר ראשון, אני אעשה פה רגע רענון, והנה הקובץ דאטה שלנו, אפשר לראות אותו פה. בואו נתחיל בלקרוא את הדאטה לתוך איזשהו ליסט.
אז נעשה את זה קצת דארקלאס פרסון ובואו נפתח את הכובד. אז איך פותחים כובד סקייה בפייתון?
כותבים with open, השם של הכובד שלנו בגלל שהוא בתיקייה הנוכחית פשוט אפשר לכתוב דאטה ודאט טקסט והוא ידע שזה פה אז F ואז בעצם F זה הכובד שלי.
כלומר, אני פותח את הקובץ הזה ואני מתייחס אליו בתוך הוויסט בתור המשתנה f. עכשיו, בעזרת השימוש בוויסט בעצם אני לא צריך לעשות קלוז לקובץ.
ברגע שאני יוצא חזרה מהאידנטציה החוזרת החוצה, פייתון אוטומטית סוגר לי את הקובץ. הייתי יכול פשוט לעשות, וזה היה שווה ערך, f שווה לopen של, וזה היה אותו דבר בדיוק, אבל ככה אני צריך לעשות קלוז, ואם הוויסט הוא חוסך לי את הקלוז, זה משהו שקיים גם ב-C-sharp למשל וקיים גם בפייתון
ועכשיו עושים for key in f ונעשה people.append חבית של p.spi נראה אם זה באמת עובד בוא נריץ ונראה מה קורה קיבלנו שגיאה זה טוב, זה באמת טעות שלי כיצור אני רוצה להוסיף person חדש אותה הזדמנות, בוא נכתוב פה איזשהו sdr קטן זה יכול לעזור לנו נחזיר את הניים וזהו כרגע זה מספיק לי בוא נריץ אוקיי
בטוח שהוא ייתן לי את הניים שלו בוא ננסה להדפיס x נדפיס עכשיו for x in נעשה את זה בתור list comprehension x for x in רואים עכשיו זה הדפיס לי את זה יפה נדע שזה פרסון נוסיף פה לולת for רק נראה שבאמת פיצרנו את הדברים.
for x in pople x ונריץ את זה. אוקיי, מוזס, ג'ון, איתן ודין. אפשר לעשות פעם את זה לקטע. אוקיי, אז את החלק הראשון סיימנו בהצלחה ונראה שעשינו את זה טוב.
עכשיו בואו נלך לחלק השני. נתחיל בליצור sqlite. אבל לפני שנעבור לsqlite, בואו רגע נעבור מה עשינו, כי יכול להיות שעשינו פה כמה דברים קצת טריקים.
אוקיי, אז דבר ראשון יצרנו ליסט שמכיל, ליסט רק, שיכיל בתוכו את כל ה-people, עשינו with open as f, וזה בעצם מה שמחזיק לי את ה...
זה הקובץ, כלומר זה מה שאני עושה לו read ו-write וכו'. עכשיו, ברגע שאני אומר לפייתון for p, בואו נשנה לזה את השם, for line in f, פייתון אוטומטית, בגלל שהיא מבינה שאני קורא פה קובץ טקסט, אז היא אוטומטית מביאה לי אותו שורה-שורה.
עכשיו, כל שורה פה בעצם מכילה לי מוזס את השם של... את השורה מהקובץ הזה: מוזס כהן 40. אז מה אני אומר? תיקח את השורה, תעשה לי ספליט לפי פסיקים, זה מחזיר לי ליסט.
את הליסט הזה תעשה לו כוכבית, שזה אומר Unpacking, לתוך הקונסטרקטור של פרסון. כלומר, הקונסטרקטור של פרסון מצפה לקבל שלושה פרמטרים:
Name, last name ו-h. בכל שורה יש לנו גם שלושה דברים: name, last name ו-h. הסימן של הכוכבית פה בעצם אומר, תיקח את ה-list הזה של align.speed ותפרוס אותו בתוך הפונקציה init של person.
כל הדבר הזה, תכניס אותו לתוך ה-list. בעצם, אם הייתי רוצה להימנע, מה הדבר הזה חוסך לי? אם הייתי רוצה לא להשתמש בטריק של הכוכבית, מה שהייתי צריך לעשות זה משהו בסגנון הזה L שווה LINE נקודה ספליט ואז L במקום האפס L במקום האחד L במקום השתיים זה היה יוצר לי בדיוק את אותו אפקט אני אשאיר את זה פה בהערה
ופשוט במקום לעשות משהו כזה ארוך אז אני פשוט יכול לעשות את זה בשורה אחת זה יותר יפה אולי קצת פחות מובן אבל עם הזמן מתרגלים אוקיי ועכשיו אחרי שהסברנו את הקוד הזה בוא נמשיך חל על העניין של הדאטאבייט, אוקיי אז בוא נתחיל דבר ראשון קונקשן או קון האובייקט שנרצה לעבוד
איתו sql נקרא לזה שווה ל sqlite 3 נקודה קונקט ופה אני צריך לתת לו את השם של הדאטאבייס אז השם של הדאטאבייס שאני רוצה בעצם השם של הקובץ שיכיל בתוכו את המידע אז בוא נקרא לו data.sql כי בניגוד לדאטה נקודה טקסט זה זה יהיה דאטה שיכיל משהו בפורמט של SQL. עכשיו
אני בעצם רוצה לקבל איזשהו מצביע ל-SQL הזה, אחרי שהתחברתי אליו, אז אני עושה קורס שווה ל-sql.cursor. אכניס רגע את קורס, ונראה שאנחנו לא עשינו פה איזושהי טעות.
אוקיי, קיבלנו פה איזשהו קורסר, ואם נעשה רגע דיר לדבר הזה, אז גם נוכל לראות מה האופציות שלנו פה. אוקיי, יש לנו פה array size, Close, Connection, Description, Execute, זאת נראה לי תקודה חשובה.
Fetch All, Fetch Many, Fetch One. בעצם כל מי שעבד עם דאטאבייסים נראה לי כבר יתחיל להבין פה מה יש לנו ביד ואיך עובדים איתו. אז בואו נתחיל את הדוגמה בלמחוק את הטבלה שעוד לא יצרנו כדי שנוכל להריץ הסקריפט הזה כמה פעמים ולא יהיה לנו בעיה.
אז קורס נקודה Execute, ואז אני עושה, זאת פקודת SQL לכל דבר, שהיא תורמת גם ל-MySQL, אני לא יודע אם יש איזה שהם ניואנסים קטנים בפקודות של ה-SQL, אבל ברמה הקונספטואלית הפקודות האלה אמורות להיות זהות בכל המסדי הנתונים של ה-SQL.
אז drop table if this, ונקרא לזה, הטבלה שלנו people, בוא נראה. אוקיי, אין שגיאה, זה טוב.
עכשיו אנחנו רוצים ליצור את הטבלה שלנו. אז נעשה עוד פעם, course.execute, ועוד פעם נעשה create table, people ומה יש לנו בטבלה הזאת? יש לנו org