Ga naar hoofdinhoud

SqliteDict op een rij

Alles wat je in de lessen met SqliteDict doet, kort bij elkaar. De uitleg staat in zes lessen:

  1. Gegevens opslaan met SqliteDict
  2. Alles bekijken: len en items
  3. Bestaat de sleutel? in en get
  4. Verwijderen met del
  5. Een dictionary als waarde
  6. Een dictionary aanpassen: ophalen, aanpassen, terugzetten

Wat wil je doen?​

Elke regel staat binnen een with SqliteDict("bestand.db") as db:-blok.

Wat wil jeCodeWat je terugkrijgt
Opslaandb["naam"] = "Jan"niets; pas na commit() staat het in het bestand
Wijzigingen bewarendb.commit()niets
Uitlezendb["naam"]de waarde, of een KeyError als de sleutel er niet is
Tellenlen(db)het aantal sleutels
Alles langslopenfor sleutel, waarde in db.items():elke sleutel met zijn waarde
Alle waarden als lijstlist(db.values())een lijst die je ook na het with-blok kunt gebruiken
Kijken of een sleutel bestaat"naam" in dbTrue of False
Uitlezen als hij misschien niet bestaatdb.get("naam", "onbekend")de waarde, of "onbekend"
Verwijderendel db["naam"]niets, of een KeyError als de sleutel er niet is
Een dictionary opslaandb["sara"] = {"klas": "4B"}niets; pas na commit() staat hij in het bestand
Een veld van een dictionary aanpassenophalen, aanpassen, db["sara"] = saraniets; zonder terugzetten blijft de oude waarde

Zo ziet het er in een script uit​

from sqlitedict import SqliteDict

with SqliteDict("mijn_data.db") as db:
db["sara"] = {"klas": "4B", "vakken": ["informatica"]}
db.commit()

with SqliteDict("mijn_data.db") as db:
if "sara" in db:
sara = db["sara"]
sara["vakken"].append("wiskunde")
db["sara"] = sara
db.commit()
print(len(db), "sleutels")

Anders dan een gewone dictionary​

SqliteDict lijkt op een dictionary, maar op deze punten gedraagt hij zich anders. Elk punt is een fout die je anders vroeg of laat tegenkomt.

  • Zonder commit() is een wijziging weg zodra het with-blok sluit. Er komt geen foutmelding, ook niet als commit() ná het blok staat.
  • Uitlezen geeft een kopie. db["sara"]["klas"] = "5B" past een kopie aan. Haal de waarde op, pas hem aan en zet hem terug.
  • Buiten het with-blok is de database dicht. db.values() en db.items() halen pas iets op als je erdoorheen loopt; doe je dat na het blok, dan krijg je AttributeError: 'NoneType' object has no attribute 'select'. Maak er binnen het blok een lijst van met list().
  • Het bestand staat in de map van je terminal, niet per se naast je script. Bestaat het daar niet, dan maakt SqliteDict stil een lege database aan.
  • Een sleutel is tekst. Sla je iets op onder het getal 1, dan komt de sleutel bij db.items() terug als "1". Gebruik daarom altijd tekst als sleutel, zoals f"bericht_{time.time_ns()}".

Alles bekijken wat erin staat​

Het script uit Alles bekijken: len en items. Verander de bestandsnaam in de database die je wilt zien, zoals gastenboek.db:

from sqlitedict import SqliteDict

with SqliteDict("mijn_data.db") as db:
print(len(db), "sleutels")
for sleutel, waarde in db.items():
print(sleutel, "=", waarde)

Waar het in de cursus terugkomt​

BestandWat erin staatLes
mijn_data.dbje eerste proeven, en later Sara met haar klas en vakkenGegevens opslaan met SqliteDict tot en met Een dictionary aanpassen: ophalen, aanpassen, terugzetten
namen.dbde laatst opgeslagen naamEen formulier opslaan
gastenboek.dbelk bericht onder een eigen sleutel, met een naam en een tekstElk bericht bewaren: een eigen sleutel
gebruikers.dbper naam het wachtwoord van een account, nog leesbaarRegistreren: een account opslaan
sessies.dbper sessie-id de naam waarmee iemand inlogde (uitbreiding)Onthouden op de server: sessies

Een fout die hier niet staat, vind je misschien bij Er gaat iets mis.