Obsługa baz danych SQL
SQLite
Trudno znaleźć system zarządzania bazą danych, którego obsługi nie byłoby w Pythonie. Jako przykładu użyjemy SQLite, ponieważ nie wymaga on instalacji serwera.
import sqlite3 connection = sqlite3.connect('database.db') cursor = connection.cursor() cursor.execute( ''' CREATE TABLE books ( id INTEGER PRIMARY KEY ASC, title TEXT, author TEXT, year INTEGER ) ''' ) library = [ (1, u'The C Programming Language', u'Kernighan, B. & Ritchie, D.', 1988), (2, u'Gödel, Escher, Bach', u'Hofstadter, D.', 1979), (3, u'The Feynman Lectures on Physics', u'Feynman, R.', 1964), (4, u'The Art of Unix Programming', u'Raymond, E.', 2003), (5, u'Introduction to Algorithms', u'Cormen, T. & Leiserson, C. & Rivest, R. & Stein, C.', 1990), ] cursor.executemany('INSERT INTO books VALUES (?, ?, ?, ?)', library) for _, title, author, year in cursor.execute('select * from books'): print author, title, year connection.commit() connection.close()
SQLAlchemy
Bilbioteka SQLAlchemy znacząco ułatwia obsługę baz danych, oferując mapowanie obiektowo-relacyjne (ORM) czyli wiersze z tabel udostępniane są jako obiekty Pythona.
from sqlalchemy import Column, Integer, String from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker Base = declarative_base() class Book(Base): __tablename__ = 'books' id = Column(Integer, primary_key=True) title = Column(String(100), nullable=False) author = Column(String(100)) year = Column(Integer) engine = create_engine('sqlite:///database.db', echo=True) Base.metadata.create_all(engine) Session = sessionmaker(bind=engine) session = Session() for book in session.query(Book).filter(Book.title.like('%n_x%')).all(): print book.author, book.title new_book = Book( title=u'Concrete Mathematics', author=u'Graham, R. & Knuth, D. & Patashnik, O.', year=1994 ) session.add(new_book) session.commit()
Zadania
-
Zmodyfikuj przykład z sekcji dotyczącej SQLite poprzez anulowanie transakcji dodania wartości do bazy.
-
Zmodyfikuj bazę tak, aby zawierała tabelę z autorami, która będzie kluczem obcym dla tabeli z książkami.
-
Przy użyciu SQLAlchemy pobierz książki, które mają więcej, niż jednego autora.
-
Usuń książki wydane przed 1984 rokiem.