Conținut curs
Python Avansat
Despre lecție

Obiective

În această lecție, veți învăța:

  1. O introducere în bazele de date relaționale și sistemele de gestionare a bazelor de date (DBMS)
  2. Ce este SQLAlchemy și de ce este important
  3. Conectarea la baze de date și definirea schemelor
  4. Interogări și tranzacții cu SQLAlchemy
  5. Relații între tabele și modelarea datelor

1. Introducere în bazele de date relaționale și sistemele de gestionare a bazelor de date (DBMS)

Bazele de date relaționale sunt un tip de bază de date care se bazează pe modelul relațional pentru a organiza și stoca datele. Într-o bază de date relațională, datele sunt stocate în tabele, unde fiecare rând reprezintă o înregistrare și fiecare coloană reprezintă un atribut al înregistrării.

Sistemele de gestionare a bazelor de date (DBMS) sunt aplicații software care permit crearea, modificarea și interogarea bazelor de date. Unele exemple populare de sisteme DBMS relaționale includ MySQL, PostgreSQL și SQLite.

2. Ce este SQLAlchemy și de ce este important

SQLAlchemy este o bibliotecă Python care oferă un set complet de instrumente pentru a lucra cu baze de date relaționale. SQLAlchemy combină puterea limbajului SQL cu flexibilitatea și abstracția programării orientate pe obiect în Python. Acest lucru permite să se scrie cod mai curat, să se reducă erorile și să se simplifice dezvoltarea și întreținerea aplicațiilor.

Pentru a începe lucrul cu SQLAlchemy, trebuie să îl instalați:

pip install sqlalchemy

3. Conectarea la baze de date și definirea schemelor

3.1. Conectarea la o bază de date

Pentru a vă conecta la o bază de date cu SQLAlchemy, trebuie să creați un obiect „engine”, care va gestiona conexiunea și comunicarea cu baza de date.

python
from sqlalchemy import create_engine

# Exemplu pentru conectarea la o bază de date SQLite
engine = create_engine('sqlite:///example.db')

3.2. Definirea schemelor

Pentru a defini schema unei baze de date, trebuie să creați clase Python care corespund tabelelor din baza de date. Aceste clase vor moșteni din clasa Base furnizată de SQLAlchemy.

python
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship

Base = declarative_base()

class Author(Base):
    __tablename__ = 'authors'
    id = Column(Integer, primary_key=True)
    name = Column(String, nullable=False)
    books = relationship("Book", back_populates="author")

class Book(Base):
    __tablename__ = 'books'
    id = Column(Integer, primary_key=True)
    title = Column(String, nullable=False)
    author_id = Column(Integer, ForeignKey('authors.id'))
    author = relationship("Author", back_populates="books")

4. Interogări și tranzacții cu SQLAlchemy

4.1. Crearea și actualizarea tabelelor

Pentru a crea sau actualiza tabelele în baza de date în funcție de schemele definite, puteți utiliza metoda create_all a obiectului Base.

python
Base.metadata.create_all(engine)

4.2. Adăugarea, actualizarea și ștergerea înregistrărilor

Pentru a adăuga, actualiza sau șterge înregistrări în baza de date, trebuie să creați o sesiune, care va gestiona tranzacțiile și comunicarea cu baza de date.

python
from sqlalchemy.orm import sessionmaker

Session = sessionmaker(bind=engine)
session = Session()

# Adăugarea unei înregistrări
author = Author(name="Jane Austen")
session.add(author)
session.commit()

# Actualizarea unei înregistrări
author.name = "Jane Austen (Updated)"
session.add(author)
session.commit()

# Ștergerea unei înregistrări
session.delete(author)
session.commit()

4.3. Interogarea datelor

Puteți folosi metodele de interogare ale obiectului Session pentru a extrage date din baza de date.

python
# Obținerea tuturor autorilor
authors = session.query(Author).all()

# Obținerea unui autor după ID
author = session.query(Author).get(1)

# Obținerea autorilor cu un anumit nume
authors = session.query(Author).filter(Author.name == "Jane Austen").all()

# Obținerea primului autor care îndeplinește o condiție
author = session.query(Author).filter(Author.name == "Jane Austen").first()

5. Relații între tabele și modelarea datelor

În SQLAlchemy, puteți defini relații între tabele folosind funcția relationship și cheile străine. În exemplul de mai sus, am definit o relație între tabelele Author și Book prin adăugarea atributelor books și author în clasele Author și Book, respectiv.

python
class Author(Base):
    # ...
    books = relationship("Book", back_populates="author")

class Book(Base):
    # ...
    author_id = Column(Integer, ForeignKey('authors.id'))
    author = relationship("Author", back_populates="books")

Aceste relații ne permit să interogăm și să lucrăm cu datele într-un mod orientat pe obiect, fără a fi nevoie să scriem interogări SQL complexe.

python
# Adăugarea unei cărți la un autor
book = Book(title="Pride and Prejudice")
author.books.append(book)

# Obținerea tuturor cărților unui autor
books = author.books

# Obținerea autorului unei cărți
book_author = book.author

În concluzie, SQLAlchemy este o bibliotecă puternică și flexibilă care vă permite să lucrați cu baze de date relaționale într-un mod mai eficient și orientat pe obiect. Prin folosirea SQLAlchemy, puteți să vă concentrați pe logica aplicației dvs., în loc să vă preocupați de detaliile legate de gestionarea și interogarea bazelor de date.