Menu

יצירת מסד נתונים ב-SQLite: איך יוצרים קובץ .db חדש

איך יוצרים מסד נתונים של SQLite: המודל המבוסס על קובץ, הפקודה sqlite3, ולמה אין פקודת CREATE DATABASE.

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

מסד נתונים של SQLite הוא פשוט קובץ

אם השתמשתם ב-MySQL או ב-Postgres, אתם רגילים להריץ CREATE DATABASE myapp; ולתת לשרת לנהל מסד נתונים חדש איפשהו מחוץ לטווח הראייה. SQLite לא עובדת ככה. אין שרת. אין פקודת CREATE DATABASE. מסד נתונים הוא קובץ רגיל אחד בדיסק, בדרך כלל עם הסיומת .db, .sqlite או .sqlite3, אבל הסיומת היא רק מוסכמה.

כדי ליצור מסד נתונים, מפנים את הכלי sqlite3 לשם קובץ שעוד לא קיים:

sqlite3 mydata.db

זהו. אם mydata.db לא קיים, SQLite מוכנה ליצור אותו. אם הוא קיים, SQLite פותחת אותו. אותה פקודה, בשני המקרים. המודל המחשבתי קרוב יותר ל"פתיחת מסמך" מאשר ל"הרמת שרת מסד נתונים".

הקובץ לא מופיע עד שכותבים משהו

הנה דבר שמבלבל אנשים. הריצו את הפקודה שלמעלה, הקלידו .quit, והסתכלו בתיקייה. הקובץ לא שם.

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

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

יצירת מסד נתונים מה-CLI

תהליך העבודה המלא מ-shell חדש:

$ sqlite3 mydata.db
SQLite version 3.45.0
Enter ".help" for usage hints.
sqlite> CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);
sqlite> .databases
main: /home/you/mydata.db r/w
sqlite> .quit

כמה פקודות CLI שימושיות כשאתם בפנים:

  • .databases: מציגה את מסדי הנתונים המצורפים ואת נתיבי הקבצים שלהם.
  • .tables: מציגה את הטבלאות במסד הנתונים הנוכחי.
  • .schema: מציגה את פקודות ה-CREATE TABLE של הכול.
  • .quit: יציאה.

אם אתם כבר בתוך sqlite3 בלי קובץ פתוח (הפעלתם אותו בלי ארגומנט), אפשר לפתוח קובץ עם .open:

sqlite> .open mydata.db

אותו כלל: יוצרת אותו אם הוא חסר, פותחת אותו אם לא.

"If Not Exists" מובנה

דאגה נפוצה ממסדי נתונים אחרים: מה אם הקובץ כבר קיים? אני אדרוס אותו? לא. פתיחה של קובץ קיים פשוט פותחת אותו. שום דבר לא נדרס. המקבילה הקרובה ביותר ל-CREATE DATABASE IF NOT EXISTS היא פשוט... לפתוח את הקובץ. SQLite מטפלת בשני המקרים עם אותה פקודה.

אם אתם דווקא רוצים להתחיל מחדש, מחקו קודם את הקובץ:

rm mydata.db
sqlite3 mydata.db

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

יצירת מסד נתונים מ-Python

ברוב הזמן לא תהיו ב-CLI: תיצרו מסדי נתונים מקוד של אפליקציה. Python מגיעה עם מודול sqlite3 בספרייה הסטנדרטית, בלי צורך בהתקנה:

sqlite3.connect("mydata.db") פועלת לפי אותו כלל כמו ה-CLI: יוצרת את הקובץ אם הוא חסר, פותחת אותו אם הוא שם. כל ספרייה אחרת לשפה אחרת (better-sqlite3 של Node, הדרייבר ל-database/sql של Go, rusqlite של Rust וכן הלאה) עובדת באותה דרך: כולן עוטפות את אותה ספריית C מתחת.

קיצור דרך אחד שספציפי ל-Python: העברת ":memory:" כנתיב נותנת לכם מסד נתונים שחי כולו ב-RAM ונעלם כשהחיבור נסגר. זה העמוד הבא.

איפה הקובץ צריך לשבת?

כיוון שמסד הנתונים הוא קובץ, "איפה לשים אותו?" היא שאלה אמיתית. כמה כללי אצבע:

  • לאפליקציה: איפשהו תחת תיקיית הנתונים של המשתמש או תיקיית העבודה של האפליקציה. אל תשימו אותו ליד קובץ ההרצה במערכות שבהן אין הרשאת כתיבה לנתיב הזה.
  • לפרויקט: בשורש ה-repo או בתיקיית data/. הוסיפו אותו ל-.gitignore אם הוא מחזיק מצב מקומי: הכנסה של מסד נתונים בינארי ל-Git כמעט אף פעם לא נגמרת טוב.
  • לבדיקות: השתמשו ב-:memory: או בקובץ זמני. מהיר ומנקה את עצמו.

גם הרשאות חשובות. המשתמש שמריץ את התהליך צריך הרשאת קריאה וכתיבה גם לקובץ וגם לתיקיית האב שלו (SQLite יוצרת קבצי נעילה לצד מסד הנתונים בזמן כתיבות).

בדיקת שפיות מהירה

כדי להוכיח שכל התהליך עובד מקצה לקצה:

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

הבא בתור: מסדי נתונים בזיכרון

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

שאלות נפוצות

איך יוצרים מסד נתונים ב-SQLite?

הריצו sqlite3 mydata.db מה-shell. SQLite יוצרת את הקובץ mydata.db אם הוא לא קיים, ופותחת אותו אם הוא קיים. אין פקודת CREATE DATABASE נפרדת: מסד הנתונים הוא הקובץ.

יש פקודת CREATE DATABASE ב-SQLite?

לא. בניגוד ל-MySQL או ל-Postgres, ל-SQLite אין פקודת SQL בשם CREATE DATABASE. מסד נתונים נוצר ברגע שמפנים את sqlite3 (או ספריית לקוח כמו המודול sqlite3 של Python) לשם קובץ שעוד לא קיים.

למה קובץ מסד הנתונים החדש שלי ב-SQLite ריק או חסר?

SQLite עצלנית: היא לא באמת כותבת את הקובץ לדיסק עד שיוצרים את הטבלה הראשונה או מבצעים commit לטרנזקציה. אם רק מריצים sqlite3 mydata.db ויוצאים, שום קובץ לא מופיע. צרו טבלה או הריצו .databases והקובץ יופיע.

איך יוצרים מסד נתונים של SQLite מ-Python?

ייבאו את המודול המובנה sqlite3 וקראו ל-sqlite3.connect('mydata.db'). הקובץ נוצר אוטומטית אם הוא חסר. השתמשו ב-':memory:' כנתיב כדי לקבל במקום זה מסד נתונים זמני בזיכרון.

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל