Mapowanie
obiektowo-relacyjne
Mateusz Burniak, 218321
Agenda
- Co to jest ORM?
- Początki
- Jak zacząć?
- Biblioteki
- Przykłady
- Zalety i wady
- 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
- 364