SQLAlchemy voorbeeld met SQLite

Op deze pagina:

    Een voorbeeld met SQLAlchemy en SQLite:

    
    #!/usr/bin/env python3
    
    from sqlalchemy import create_engine, ForeignKey, Column, String, Integer, CHAR
    from sqlalchemy.orm import sessionmaker, declarative_base
    
    Base = declarative_base()
    
    class Persoon(Base):
       __tablename__ = "personen"
    
       pid = Column("pid", Integer, primary_key=True)
       voornaam = Column("voornaam", String)
       achternaam = Column("achternaam", String)
       geslacht = Column("geslacht", CHAR)
       leeftijd = Column("leeftijd", Integer)
    
       def __init__(self, pid, voornaam, achternaam, geslacht, leeftijd):
          self.pid = pid
          self.voornaam = voornaam
          self.achternaam = achternaam
          self.geslacht = geslacht
          self.leeftijd = leeftijd
    
       def __repr__(self):
          return f"({self.pid} {self.voornaam} {self.achternaam} {self.geslacht} {self.leeftijd})"
    
    class Artikel(Base):
       __tablename__ = "artikelen"
    
       aid = Column("aid", Integer, primary_key=True)
       omschrijving = Column("omschrijving", String)
       eigenaar = Column(Integer, ForeignKey("personen.pid"))
    
       def __init__(self, aid, omschrijving, eigenaar):
          self.aid = aid
          self.omschrijving = omschrijving
          self.eigenaar = eigenaar
    
       def __repr__(self):
          return f"({self.omschrijving})"
    
    engine = create_engine("sqlite:///:memory:")
    Base.metadata.create_all(bind=engine)
    
    Session = sessionmaker(bind=engine)
    session = Session()
    
    p1 = Persoon(101, "Jan", "Jansen", "m", 23)
    p2 = Persoon(102, "Maria", "Meester", "f", 62)
    p3 = Persoon(103, "Fred", "Willemse", "m", 36)
    
    session.add(p1)
    session.add(p2)
    session.add(p3)
    session.commit()
    
    def scheiding():
       print(' -'*25)
    
    results1 = session.query(Persoon).filter(Persoon.achternaam == "Jansen")
    scheiding()
    print('resultaat achternaam jansen')
    for r in results1:
       print(r)
    scheiding()
    
    results2 = session.query(Persoon).filter(Persoon.voornaam.like("%Ma%"))
    print('resultaat voornaam %Ma%')
    for r in results2:
       print(r)
    scheiding()
    
    results3 = session.query(Persoon).filter(Persoon.voornaam.in_(["Jan", "Maria"]))
    print('resultaat voornaam Jan of Maria')
    for r in results3:
       print(r)
    scheiding()
    
    a1 = Artikel(101, "Fiets", p1.pid)
    a2 = Artikel(102, "Brommer", p2.pid)
    a3 = Artikel(103, "Boek", p3.pid)
    a4 = Artikel(104, "Radio", p1.pid)
    a5 = Artikel(105, "Telefoon", p2.pid)
    
    session.add(a1)
    session.add(a2)
    session.add(a3)
    session.add(a4)
    session.add(a5)
    session.commit()
    
    results4 = session.query(Artikel).filter(Artikel.eigenaar == Persoon.pid).filter(Persoon.voornaam == "Jan")
    print('resultaat eigenaar Jan')
    for r in results4:
       a = str(r)
       ar = a[1:len(a) - 1]
       print(ar)
    

    resultaat:

    
     - - - - - - - - - - - - - - - - - - - - - - - - -
    resultaat achternaam jansen
    (101 Jan Jansen m 23)
     - - - - - - - - - - - - - - - - - - - - - - - - -
    resultaat voornaam %Ma%
    (102 Maria Meester f 62)
     - - - - - - - - - - - - - - - - - - - - - - - - -
    resultaat voornaam Jan of Maria
    (101 Jan Jansen m 23)
    (102 Maria Meester f 62)
     - - - - - - - - - - - - - - - - - - - - - - - - -
    resultaat eigenaar Jan
    Fiets
    Radio
    

     

    Verwante artikelen