• בלוג
  • עמוד 184
  • שלוש דוגמאות קטנות לעבודה עם בסיסי נתונים בפייתון

שלוש דוגמאות קטנות לעבודה עם בסיסי נתונים בפייתון

22/11/2019

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

בפייתון PEP 249 מאפיין את הממשק הרצוי לדרייברים לבסיסי הנתונים השונים בפייתון. בואו נראה 3 דוגמאות לעבודה עם בסיס נתונים SQLite כדי לקבל מושג איך הממשק הזה נראה.

1. יצירת בסיס נתונים וטבלאות

התוכנית הראשונה יוצרת בסיס נתונים מסוג SQLite ובתוכו יוצרת שתי טבלאות:

import sqlite3
conn = sqlite3.connect('example.db')

c = conn.cursor()

c.execute('CREATE TABLE people (name text, email text)')

c.execute('''CREATE TABLE stocks
             (date text, trans text, symbol text, qty real, price real)''')

conn.close()

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

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

2. הכנסת מידע לבסיס הנתונים

התוכנית הבאה מכניסה שלוש שורות לבסיס הנתונים לטבלת People:

import sqlite3
conn = sqlite3.connect('example.db')

c = conn.cursor()

# Larger example that inserts many records at a time
people = [
    ('one', 'one@gmail.com'),
    ('two', 'two@gmail.com'),
    ('three', 'three@gmail.com')
]

c.executemany("INSERT INTO people VALUES(?, ?)", people)
conn.commit()

c.close()
conn.close()

שתי הפקודות החדשות בתוכנית הן executemany ו commit. הפקודה executemany מקבלת שאילתה ומערך של "ערכים למילוי" ומפעילה את השאילתה עם כל אחד מערכי המילוי מהמערך. אפשר להשתמש גם ב execute בשביל להכניס מידע לבסיס הנתונים ואז במקום להעביר מערך נעביר Tuple יחיד של ערכי המילוי. הפקודה commit היא ששומרת בסוף את המידע וחייבים לקרוא לה לפני שסוגרים את החיבור.

3. שליפת מידע מבסיס הנתונים

התוכנית השלישית שולפת את המידע ופשוט מדפיסה אותו על המסך:

import sqlite3
conn = sqlite3.connect('example.db')

c = conn.cursor()
name = 'one'
query = c.execute("SELECT * FROM people WHERE name = ?", (name,))
results = query.fetchall()
for row in results:
    print(row)

c.close()
conn.close()

הפקודה execute כמו שכבר הבנתם מקבלת Tuple עם ערכים להחלפה (במקום הסימן שאלה), והפקודה fetchall מפעילה את השאילתה ומחזירה לנו אוביקט תוצאות. בעזרת אוביקט התוצאות נוכל לעבור שורה שורה על התוצאות ולהדפיס כל אחת. בעבודה עם סטים גדולים של תוצאות הרבה פעמים נרצה להשתמש ב fetchmany ולקבוע את גודל המנה. זה יראה כך:

import sqlite3
conn = sqlite3.connect('example.db')

c = conn.cursor()
name = 'one'
query = c.execute("SELECT * FROM people")

while True:
    results = query.fetchmany(2)
    if len(results) == 0: break

    for row in results:
        print(row)

c.close()
conn.close()

לסיכום פייתון מספקת חיבור נוח וטבעי לבסיסי נתונים שונים בממשק אחיד שלהרבה תוכניות יהיה מספיק טוב. לפרטים נוספים שווה לקרוא את PEP 249 עצמו או את דף התיעוד על המודול sqlite3 שמגיע יחד עם פייתון.