Letztes Mal studierte die Grundlagen von DB und RDB.
Lassen Sie uns dieses Mal endlich DB aus Python verwenden.
Installieren Sie sqlalchemy
$ pip install sqlalchemy
Erstellen Sie db.py
und schreiben Sie den folgenden Inhalt.
db.py
from sqlalchemy import create_engine, MetaData
engine = create_engine('sqlite:///db.sqlite3', echo=True)
metadata = MetaData()
metadata.bind = engine
Ich werde es Zeile für Zeile erklären.
engine = create_engine('sqlite:///db.sqlite3', echo=True)
Erstellen Sie ein Objekt, um eine Verbindung zur Datenbank herzustellen.
Geben Sie im ersten Argument von "create_engine" die URL der Verbindungsziel-DB an. Ich werde nicht näher auf die DB-URL eingehen, aber für SQLite ist es in Ordnung, "SQLite: /// Dateiname" anzugeben.
Durch Angabe von "echo = True" für "create_engine" wird das Protokoll ausgegeben. Es ist nützlich für das Debuggen, daher wird empfohlen, es anzugeben.
In der Regel muss die Verbindungsziel-Datenbank im Voraus erstellt werden. SQLite erstellt sie jedoch automatisch, wenn die Verbindungsziel-Datenbank nicht vorhanden ist.
matadata = MetaData()
Erstellen Sie die Metadaten.
Das Schema der Tabelle wird in den Metadaten gespeichert. Wenn Sie es jedoch nicht verstehen, ist es in Ordnung zu erkennen, dass "Ich weiß nicht, aber die DB-Daten sind enthalten".
metadata.bind = engine
Verbinden Sie die Metadaten mit der Datenbank.
Hier erstellen wir eine Menütabelle mit einer Namensspalte und einer kcal-Spalte.
Bearbeiten Sie db.py wie folgt.
db.py
#Importieren Sie zusätzliche Klassen für die Tabellendefinition
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
engine = create_engine('sqlite:///db.sqlite3', echo=True)
metadata = MetaData()
metadata.bind = engine
#Menü Tabellendefinition
menus = Table(
'menus', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('kcal', Integer)
)
Geben Sie den Tabellennamen im ersten Argument von "Tabelle" und die Metadaten im zweiten Argument an. Danach können Sie die Spalte frei angeben.
Legen Sie außerdem den Spaltennamen im ersten Argument von "Column" und den Spaltentyp im zweiten Argument fest. Außerdem wird die Spalte "id" als Primärschlüssel festgelegt.
Zu diesem Zeitpunkt ist die Tabellendefinition abgeschlossen, die Tabelle wurde jedoch noch nicht erstellt.
Starten Sie die interaktive Shell und erstellen Sie eine Tabelle wie unten gezeigt.
>>> import db
>>> db.metadata.create_all()
An dieser Stelle kann endlich die Bedeutung von Metadaten gesehen werden, die nicht so viel erklärt werden konnten. Da Metadaten sowohl die Struktur der Tabelle als auch die "Engine" haben, können Sie die Tabelle erstellen.
Wenn "Metadaten" und "Engine" zu diesem Zeitpunkt nicht verknüpft sind, müssen Sie Folgendes explizit angeben.
>>> import db
>>> db.metadata.create_all(engine)
Es wird auch empfohlen, "Metadaten" und "Engine" im Voraus zu verbinden, da es ein wenig mühsam sein wird, nicht nur die Tabelle zu erstellen, sondern auch die Datenbank in Zukunft zu betreiben.
Es war vielleicht etwas schwierig, aber jetzt können Sie die Datenbank verwenden. Auch wenn Sie den Inhalt bisher nicht verstehen, gibt es kein unmittelbares Problem mit den folgenden Inhalten. Es ist jedoch etwas, das Sie verstehen sollten. Bitte lesen Sie es nach einer Weile noch einmal.
Der Vorgang zum Erstellen von Daten wird in RDBMS als ** Einfügen ** bezeichnet. Beachten Sie, dass es sich um eine Einfügung handelt, nicht um eine Erstellung. Dies ist möglicherweise leichter zu merken, wenn Sie neue Daten als Einfügen einer neuen Zeile in die Tabelle erstellen möchten.
In der SQLalchemie wird "Einfügen" wie folgt ausgeführt.
>>> import db
>>> db.menus.insert().execute(name='Curry Meshi', kcal=500)
Beachten Sie, dass wir nach dem Aufruf von "Einfügen" erneut "Ausführen" aufrufen. Es wird keine Operation ausgeführt, bis Sie "Ausführen" aufrufen.
Dies gilt auch für andere Vorgänge. Operationen an der DB werden in der Regel erst ausgeführt, wenn execute
aufgerufen wird.
Verwenden Sie select
, um die Daten abzurufen.
Versuchen Sie zunächst, den folgenden Code auszuführen.
>>> import db
>>> db.menus.select().execute().fetchall()
[(1, 'Curry Meshi', 500)]
Wie bei "Einfügen" werden keine Daten abgerufen, bis Sie "Ausführen" aufrufen. Beachten Sie auch, dass wir für das Ergebnis von "execute" weiter "fetchall" aufrufen.
Beachten Sie, dass der Rückgabewert wie eine Liste von Taples aussieht, dies jedoch nicht ist. Sie können es wie ein Taple wie "res [0] [0]" behandeln, aber Sie können es auch über den Spaltennamen für "res [0] ['id']" erhalten.
Zusätzlich zum Abrufen aller Daten können Sie "where" verwenden, um die abzurufenden Daten einzugrenzen, "order_by" zum Sortieren verwenden und "limit" verwenden, um die Anzahl der abzurufenden Daten zu begrenzen. Du kannst auch.
Mit dem folgenden Code können Sie beispielsweise "bis zu 5 Menüs mit weniger als 100 kcal abrufen und nach Kalorien sortieren".
>>> import db
>>> db.menus.select().where(db.menus.c.kcal < 100).order_by('kcal').limit(5).execute().fetchall()
Diese Art der Verfeinerung gilt auch für das Aktualisieren und Löschen von Daten.
Verwenden Sie "Update". Die Grundlagen sind die gleichen wie beim Einfügen. Beachten Sie jedoch, dass alle Daten als Ziel ausgewählt werden, wenn Sie nicht eingrenzen.
Der folgende Code aktualisiert kcal
auf 1000 für Daten mit id
1.
>>> import db
>>> db.menus.update().where(db.menus.c.id == 1).execute(kcal=1000)
Verwenden Sie "Löschen". Die Grundlagen sind die gleichen wie "Einfügen" und "Aktualisieren".
Der folgende Code entfernt alle Daten mit "kcal" größer als 1000.
>>> import db
>>> db.menus.delete().where(db.menus.c.kcal > 1000).execute()
execute
aufgerufen wird.Von der ersten Hälfte an war der Inhalt etwas schwierig. Es ist egal, ob Sie nicht alles verstehen. Es kann auch als einfache Referenz verwendet werden. Wenn Sie sich also verlaufen, überprüfen Sie es erneut.
Diesmal war es schwieriger als beim letzten Mal. Es spielt keine Rolle, wenn Sie nicht alles auf einmal verstehen. Selbst wenn Sie glauben, es zu verstehen, wissen Sie möglicherweise nicht, wie Sie es schreiben sollen, wenn Sie tatsächlich versuchen, den Code zu schreiben. Lesen Sie ihn in einem solchen Fall erneut.
Recommended Posts