0%

Eine Python-Schnittstelle um die Datenbank legen · Übung

Einfache Datensätze verfügbarer Gegenstände zurückgeben

Der aufrufende Code möchte Katalogdatensätze, keine SQLite-Interna. Eine nützliche öffentliche Rückgabe sieht so aus:

{'id': 1, 'asset_tag': 'IT-100', 'name': 'Cordless drill',
 'category': 'tools', 'loan_days': 7}

Das aktuelle Paar (result, rows) hat seinen Zweck erfüllt: Du hast gesehen, dass die Ausführung einen Cursor zurückgibt und fetchall() eine separate Liste von sqlite3.Row-Werten. Dieses Paar öffentlich beizubehalten würde jeden Aufrufer zwingen, diese Details zu verstehen.

Öffne catalog_db.py. Ändere nur die letzte Rückgabe in list_available_items(connection):

available_items = []
for row in rows:
    available_items.append(dict(row))
return available_items

Jede konfigurierte Row kennt die fünf Namen aus der SELECT-Liste, also erstellt dict(row) ein eingebautes Dictionary mit genau diesen Schlüsseln:

id, asset_tag, name, category, loan_days

Die Schleife wandelt jede abgeholte Row um und sammelt die Dictionaries in einer einfachen Liste. Das Ergebnisobjekt bleibt ein nützliches lokales Implementierungsdetail, überschreitet aber nicht mehr die Funktionsgrenze. Aufrufender Code kann gewöhnliche Dictionaries vergleichen, serialisieren oder anzeigen, ohne sqlite3 zu importieren oder sich Spaltenpositionen zu merken.

Behalte das SQL unverändert bei. Sein Left Join ordnet nur aktive Ausleihvorgänge zu, und WHERE loans.id IS NULL behält Gegenstände ohne solchen Treffer. Das bedeutet, dass ein Gegenstand mit zurückgegebenem Verlauf verfügbar ist, genauso wie einer, der noch nie ausgeliehen wurde. ORDER BY items.asset_tag liefert dem aufrufenden Code eine stabile Sortierung direkt aus der Datenbank.

Klicke auf Run. Der Aufruf bleibt list_available_items(connection) mit einer Verbindung aus open_database(database_path). Die beobachtete öffentliche Form ändert sich jetzt:

Returned container type: list
First row type: dict
First row values: 1 | IT-100 | Cordless drill | tools | 7

Die Ausgabe zeigt außerdem alle vier Dictionaries in Inventarkennzeichen-Reihenfolge. Der Einstellungsblock bleibt unverändert, weil eine verschobene öffentliche Grenze die Verbindungseinrichtung nicht ändert.

Submit verwendet neue Werte, einen Namen mit Apostroph, eine gemischte Einfügereihenfolge, aktive Ausleihvorgänge, zurückgegebenen Verlauf und noch nie ausgeliehene Gegenstände. Es ruft zweimal auf und prüft die exakten Schlüssel und Werte eingebauter Dictionaries. Verändere weder den Katalog noch schließe die übergebene Verbindung.

Aufgabe

Ändere list_available_items(connection), sodass es mit einer Schleife eine Liste aus dict(row)-Werten erstellt und diese Liste zurückgibt.

Behalte die Abfrage, fetchall() und die Verantwortung für die Verbindung unverändert bei. Gib eine Liste eingebauter Dictionaries mit genau id, asset_tag, name, category und loan_days zurück, sortiert nach Inventarkennzeichen. Gib weder den Cursor noch sqlite3.Row-Werte zurück.