Gegevens selecteren uit een Table met SQLAlchemy
Goed bezig tot nu toe! Tijd om je eerste select-statement te bouwen met SQLAlchemy. SQLAlchemy biedt een fijne, “Pythonic” manier om met databases te werken. In de vorige oefening, met ruwe SQL, queryde je de database direct. Met SQLAlchemy ga je via een Table-object, en SQLAlchemy zorgt ervoor dat je query wordt vertaald naar de juiste SQL-instructie. In plaats van je bezig te houden met verschillen tussen SQL-dialecten zoals MySQL of PostgreSQL, kun je zo het Pythonic framework van SQLAlchemy benutten om je workflow te stroomlijnen en je data efficiënter te bevragen. Daarom is het de moeite waard om te leren, ook als je traditionele SQL al kent.
In deze oefening bouw je opnieuw een statement om alle records uit de census-tabel op te halen. Deze keer maak je gebruik van de select()-functie van de sqlalchemy-module. Deze functie verwacht als enige verplichte argument een lijst met tabellen of kolommen: bijvoorbeeld select([my_table]).
Je haalt ook slechts een paar records op uit de ResultProxy met .fetchmany() en een size-argument dat aangeeft hoeveel records je wilt ophalen.
Table en MetaData zijn al geïmporteerd. De metadata is beschikbaar als metadata en de connectie met de database als connection.
Deze oefening maakt deel uit van de cursus
Introductie tot databases in Python
Oefeninstructies
- Importeer
selectuit desqlalchemy-module. - Reflecteer de
census-tabel. Deze code is al voor je geschreven. - Maak een query met de
select()-functie om alle records in decensus-tabel op te halen. Geef hiervoor een lijst door aanselect()met één element:census. - Print
stmtom de daadwerkelijke SQL-query te zien die wordt gemaakt. Deze code is al voor je geschreven. - Haal 10 records op uit de
census-tabel en sla die op inresults. Doe dit als volgt:- Gebruik de methode
.execute()opconnectionmetstmtals argument om de ResultProxy op te halen. - Gebruik
.fetchmany()met het juistesize-argument opconnection.execute(stmt)om de ResultSet op te halen.
- Gebruik de methode
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# Import select
from ____ import ____
# Reflect census table via engine: census
census = Table('census', metadata, autoload=True, autoload_with=engine)
# Build select statement for census table: stmt
stmt = ____
# Print the emitted statement to see the SQL string
print(stmt)
# Execute the statement on connection and fetch 10 records: result
results = ____.____(____).____(size=___)
# Execute the statement and print the results
print(results)