Mapowanie
 obiektowo-relacyjne

Mateusz Burniak, 218321

Agenda

  1. Co to jest ORM?
  2. Początki
  3. Jak zacząć?
  4. Biblioteki
  5. Przykłady
  6. Zalety i wady
  7. Pytania

Czym jest ORM?

Początki ORM

  • 1996 - TopLink
  • 1999 - J2EE
  • 2005 - Django ORM
  • 2006 - SQLAlchemy

Jak zacząć?

Biblioteki ORM

  • Python: SQLAlchemy, Django ORM
  • C++: LiteSQL, ODB, Wt, QxOrm
  • Java: Hibernate, Torque
  • Ruby: ActiveRecord

Połączenie z bazą danych

>>> from sqlalchemy import (
...     create_engine)


>>> engine = create_engine(
...     ''postgresql+psycopg2:''
...     ''//user:password@host:port/dbname'')

Definiowanie tabel

>>> from sqlalchemy.ext.declarative import (
...     declarative_base)

>>> from sqlalchemy import Column, Integer, Text

>>> Base = declarative_base()
>>> class User(Base):
...     __tablename__ = ''users''
...     id = Column(Integer, primary_key=True)
...     name = Column(Text)
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name TEXT
);

Tworzenie sesji

>>> from sqlalchemy.orm import (
...     sessionmaker)

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

Tworzenie obiektów

>>> new_user = User(name=''jan'')

>>> session.add(new_user)

Odpytywanie bazy

>>> users = session.query(User).\
...     filter_by(name=''jan'')

>>> list(users)
[<User(name=''jan'')>]

Modyfikacja danych

i zatwierdzanie zmian

>>> users[0].name = ''jasiek''

>>> session.commit()

Usuwanie danych

>>> session.delete(new_user)

>>> session.query(User).\
...     filter_by(name=''jasiek'').count()
0

Zalety ORM

  • niezależność od DBMS
  • szybsze tworzenie aplikacji
  • większe bezpieczeństwo

Wady ORM

  • brak wpływu na sposób
    zaimplementowania przyłączeń do bazy
  • dodatkowe połączenie
    utrudnia znalezienie błędu

Bibliografia

  • https://pl.wikipedia.org/wiki/Mapowanie_obiektowo-relacyjne (2016-11-27)
    http://www.agile-code.com/blog/microsoft-net-or-mapper-choose-your-own/ (2016-11-27)
  • Z. Rosiek, “Mapowanie obiektowo-relacyjne ORM - czy tylko dobra idea”, ZESZYTY NAUKOWE 99-112, Warszawa, 2015
  • http://www.entityframeworktutorial.net/choosing-development-approach-with- entity-framework.aspx (2016-11-27)
  • “PostgreSQL i SQLAlchemy - duet (nie)doskonały” - Marcin Bardź, prezentacja na PyConPl’16,  2016-10-15
  • http://roman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_nr4.pdf (2016-11-27)
  • Dokumentacja SQLAlchemy. http://docs.sqlalchemy.org/en/latest (2016-11-27)
  • Wzorzec projektowy SQLAlchemy:  https://en.wikipedia.org/wiki/Active_record_pattern (2016-11-27)

Pytania?

sem-prez

By Mateusz Burniak

sem-prez

  • 336