Repository navigation
Expand file tree
/
Copy pathormsa04.py
More file actions
73 lines (57 loc) · 2.24 KB
/
Copy pathormsa04.py
File metadata and controls
73 lines (57 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import sys, os
from sqlalchemy import Column, ForeignKey, Integer, String, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, sessionmaker
if os.path.exists('test.db'):
os.remove('test.db')
# tworzymy instancję klasy Engine do obsługi bazy
baza = create_engine('sqlite:///test.db') # ':memory:'
# klasa bazowa
BazaModel = declarative_base()
# klasy Klasa i Uczen opisują rekordy tabel "klasa" i "uczen"
# oraz relacje między nimi
class Klasa(BazaModel):
__tablename__ = 'klasa'
id = Column(Integer, primary_key=True)
nazwa = Column(String(100), nullable=False)
profil = Column(String(100), default='')
uczniowie = relationship('Uczen', backref='klasa')
class Uczen(BazaModel):
__tablename__ = 'uczen'
id = Column(Integer, primary_key=True)
imie = Column(String(100), nullable=False)
nazwisko = Column(String(100), nullable=False)
klasa_id = Column(Integer, ForeignKey('klasa.id'))
# tworzymy tabele
BazaModel.metadata.create_all(baza)
# tworzymy sesję, która przechowuje obiekty i umożliwia "rozmowę" z bazą
BDSesja = sessionmaker(bind=baza)
sesja = BDSesja()
# dodajemy dwie klasy, jeżeli tabela jest pusta
if not sesja.query(Klasa).count():
sesja.add(Klasa(nazwa='1A', profil='matematyczny'))
sesja.add(Klasa(nazwa='1B', profil='humanistyczny'))
# tworzymy instancję klasy Klasa reprezentującą klasę "1A"
klasa = sesja.query(Klasa).filter_by(nazwa = '1A').one()
# dodajemy dane wielu uczniów
sesja.add_all([
Uczen(imie='Tomasz',nazwisko='Nowak',klasa_id=klasa.id),
Uczen(imie='Jan',nazwisko='Kos',klasa_id=klasa.id),
Uczen(imie='Piotr',nazwisko='Kowalski',klasa_id=klasa.id),
])
def czytajdane():
for uczen in sesja.query(Uczen).join(Klasa).all():
print uczen.id, uczen.imie, uczen.nazwisko, uczen.klasa.nazwa
print ""
czytajdane()
# zmiana klasy ucznia o identyfikatorze 2
uczen = sesja.query(Uczen).filter(Uczen.id == 2).one()
uczen.klasa_id = sesja.query(Klasa.id).filter(Klasa.nazwa == '1B').scalar()
# usunięcie ucznia o identyfikatorze 3
sesja.delete(sesja.query(Uczen).get(3))
czytajdane()
# zapisanie zmian w bazie i zamknięcie sesji
sesja.commit()
sesja.close()