Aan de slagGa gratis aan de slag

Tabellen automatisch laden vanuit een database

Met SQLAlchemy kun je tabellen automatisch uit een database laden via zogeheten reflection. Reflection is het proces waarbij de database wordt uitgelezen en de metadata op basis daarvan wordt opgebouwd. Het is het tegenovergestelde van handmatig een Table aanmaken en heel handig als je met bestaande databases werkt.

Voor reflection moet je eerst een MetaData-object importeren en initialiseren. MetaData-objecten bevatten informatie over tabellen die in een database zijn opgeslagen. Tijdens reflection wordt het MetaData-object automatisch gevuld met informatie over de gereflecteerde tabel, dus we hoeven het alleen te initialiseren door MetaData() aan te roepen.

Je moet ook het Table-object uit het SQLAlchemy-pakket importeren. Vervolgens gebruik je dit Table-object om je tabel via de engine in te lezen, de kolommen automatisch te laden en de metadata te vullen. Dit kan met één aanroep van Table(): het gebruiken van het Table-object op deze manier lijkt op het doorgeven van argumenten aan een functie. Om bijvoorbeeld de kolommen met de engine automatisch te laden, geef je de keyword-argumenten autoload=True en autoload_with=engine mee aan Table().

Tot slot gebruik je de functie repr() om informatie te bekijken over het object dat je zojuist hebt gemaakt. Voor elk Python-object geeft repr() een tekstuele weergave van dat object terug. Voor SQLAlchemy-Table-objecten geeft het de informatie over die tabel terug die in de metadata is opgenomen.

In deze oefening is het jouw taak om de tabel "census" die beschikbaar is op je engine te reflecteren naar een variabele met de naam census. We hebben de code om de engine te maken die je in de vorige oefening schreef alvast voor je ingevuld.

Deze oefening maakt deel uit van de cursus

Introductie tot databases in Python

Cursus bekijken

Oefeninstructies

  • Importeer Table en MetaData uit sqlalchemy.
  • Maak een MetaData-object: metadata
  • Reflecteer de tabel census met het Table-object met de volgende argumenten:
    • De naam van de tabel als string ('census').
    • De metadata die je zojuist hebt geïnitialiseerd.
    • autoload=True
    • De engine om mee te autoloaden - in dit geval engine.
  • Print de details van census met de functie repr().

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

# Import create_engine, MetaData, and Table
from sqlalchemy import create_engine, ___, ____

# Create engine: engine
engine = create_engine('sqlite:///census.sqlite')

# Create a metadata object: metadata
metadata = ___

# Reflect census table from the engine: census
census = Table(____, ____, autoload=____, autoload_with=____)

# Print census table metadata
print(____)
Code bewerken en uitvoeren