Skip to content

Commit

Permalink
Dodanie ormxx03
Browse files Browse the repository at this point in the history
  • Loading branch information
xinulsw committed Dec 18, 2014
1 parent 021085f commit 98f7e4d
Show file tree
Hide file tree
Showing 2 changed files with 117 additions and 0 deletions.
57 changes: 57 additions & 0 deletions docs/bazy/ormpw03.py
@@ -0,0 +1,57 @@
#! /usr/bin/env python
# -*- coding: utf-8 -*-

import sys, os
from peewee import *

if os.path.exists('test.db'):
os.remove('test.db')
# tworzymy instancję bazy używanej przez modele
baza = SqliteDatabase('test.db') # ':memory:'

# klasa bazowa
class BazaModel(Model):
class Meta:
database = baza

# klasy Klasa i Uczen opisują rekordy tabel "klasa" i "uczen"
# oraz relacje między nimi
class Klasa(BazaModel):
nazwa = CharField(null=False)
profil = CharField(default='')

class Uczen(BazaModel):
imie = CharField(null=False)
nazwisko = CharField(null=False)
klasa = ForeignKeyField(Klasa, related_name = 'uczniowie')

baza.connect() # nawiązujemy połączenie z bazą
baza.create_tables([Klasa, Uczen],True) # tworzymy tabele

# dodajemy dwie klasy, jeżeli tabela jest pusta
if Klasa().select().count() == 0:
klasa = Klasa(nazwa = '1A', profil = 'matematyczny')
klasa.save()
klasa = Klasa(nazwa = '1B', profil = 'humanistyczny')
klasa.save()

# tworzymy instancję klasy Klasa reprezentującą klasę "1A"
klasa = Klasa.select().where(Klasa.nazwa == '1A').get()

# lista uczniów, których dane zapisane są w słownikach
uczniowie = [
{ 'imie':'Tomasz', 'nazwisko':'Nowak', 'klasa':klasa },
{ 'imie':'Jan', 'nazwisko':'Kos', 'klasa':klasa },
{ 'imie':'Piotr', 'nazwisko':'Kowalski', 'klasa':klasa }
]

# dodajemy dane wielu uczniów
Uczen.insert_many(uczniowie).execute()

# odczytujemy dane z bazy
def czytajdane():
for uczen in Uczen.select().join(Klasa):
print uczen.id, uczen.imie, uczen.nazwisko, uczen.klasa.nazwa
print ""

czytajdane()
60 changes: 60 additions & 0 deletions docs/bazy/ormsa03.py
@@ -0,0 +1,60 @@
#! /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(Klasa.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()

0 comments on commit 98f7e4d

Please sign in to comment.