[PYTHON] Einführung in RDB mit sqlalchemy II

Letztes Mal studierte die Grundlagen von DB und RDB.

Lassen Sie uns dieses Mal endlich DB aus Python verwenden.

Vorbereitungen

Installieren Sie sqlalchemy

$ pip install sqlalchemy

Datenbankvorbereitung

Verbindung mit der Datenbank

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.

Tabellendefinition

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.

Eine Tabelle erstellen

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()

Evolution: Bedeutung von Metadaten

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.

Zusammenfassung

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.

Nutzung der DB

Daten erstellen

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.

Daten bekommen

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.

Datenaktualisierung

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)

Daten löschen

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()

Zusammenfassung

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.

Diese Zusammenfassung

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

Einführung in RDB mit sqlalchemy II
Einführung in RDB mit sqlalchemy Ⅰ
Wie aktualisiere ich mit SQLAlchemy?
Wie mit SQLAlchemy ändern?
Wie lösche ich mit SQLAlchemy?
Stellen Sie mit SQL Alchemy eine Verbindung zu mehreren Datenbanken her
So verbinden Sie INNER mit SQL Alchemy
[Einführung in WordCloud] Spielen Sie mit Scraping ♬
Einführung in das Auffüllen von Python-Bildern Auffüllen von Bildern mit ImageDataGenerator
[Einführung in Pytorch] Ich habe mit sinGAN ♬ gespielt
Verwendung von SQLAlchemy / Connect mit aiomysql
Einführung in MQTT (Einführung)
Einführung in Scrapy (1)
Einführung in Scrapy (3)
Erste Schritte mit Supervisor
Einführung in Tkinter 1: Einführung
Einführung in PyQt
Einführung in Scrapy (2)
[Linux] Einführung in Linux
Einführung in Scrapy (4)
Einführung in discord.py (2)
Einführung in das Testen statistischer Hypothesen mit Statistikmodellen
[Python] Einfache Einführung in das maschinelle Lernen mit Python (SVM)
Einführung in die künstliche Intelligenz mit Python 1 "Genetic Algorithm-Theory-"
Markov-Kette Künstlich Gehirnlos mit Python + Janome (2) Einführung in die Markov-Kette
Einführung in die künstliche Intelligenz mit Python 2 "Genetic Algorithm-Practice-"
[Einführung in StyleGAN2] Unabhängiges Lernen mit 10 Anime-Gesichtern ♬
Einführung in Tornado (1): Python Web Framework mit Tornado gestartet
Einführung in den Formationsflug mit Tello edu (Python)
[Einführung zur Minimierung] Datenanalyse mit SEIR-Modell ♬
Einführung in Python mit Atom (unterwegs)
Einführung in Vector Self-Return-Modelle (VAR) mit Statistikmodellen
Einführung in das Generalized Linear Model (GLM) von Python
[Einführung in die Udemy Python3 + -Anwendung] 9. Drucken Sie zunächst mit print
[Einführung in Python] Wie iteriere ich mit der Bereichsfunktion?
[Einführung in Word Cloud] Einfache Verwendung mit Jetson-nano ♬
Einführung in Lightning Pytorch
Erste Schritte mit Web Scraping
Einführung in nichtparametrische Felder
Einführung in EV3 / MicroPython
Einführung in die verteilte Parallelverarbeitung von Python durch Ray
Einführung in die Mathematik ab Python Study Memo Vol.1
Lesehinweis: Einführung in die Datenanalyse mit Python
Einführung in die Python-Sprache
[Kapitel 6] Einführung in Scicit-Learn mit 100 Klopfen Sprachverarbeitung
Einführung in die TensorFlow-Bilderkennung
Einführung in OpenCV (Python) - (2)
[Kapitel 3] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Einführung in PyQt4 Teil 1
[Einführung in Pytorch] Ich habe versucht, Cifar10 mit VGG16 ♬ zu kategorisieren
[Kapitel 2] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Einführung in die Abhängigkeitsinjektion
Einführung in Private Chainer
Einführung in Vector Error Correction Models (VECM) mit Statistikmodellen
Verwenden Sie Enum mit SQLAlchemy
Einführung in das maschinelle Lernen
[Einführung in AWS] Ich habe versucht, mit der Sprach-Text-Konvertierung zu spielen ♪
[Kapitel 4] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Einfache Einführung in Home Hack mit Raspberry Pi und discord.py