[PYTHON] Grundlegende Verwendung von SQL Alchemy

Was ist SQL Alchemy?

SQLAlchemy ist eine der ORMs, die in Python häufig verwendet werden. ORM ist ein objektrelationaler Mapper. Einfach ausgedrückt, es gibt eine Eins-zu-Eins-Entsprechung zwischen Tabellen und Klassen, und Daten können über die Methoden dieser Klasse erfasst und geändert werden.

Was sind die Vorteile von ORM?

1. Absorbiert den Unterschied zwischen verschiedenen DBs

Da derselbe Quellcode unabhängig vom DB-Typ verwendet werden kann, muss der Code nicht neu geschrieben werden, wenn mehrere DBs zusammen verwendet werden oder wenn DBs geändert werden.

2. Sie müssen kein SQL schreiben

SQL wird zum Betreiben von DBs wie MySQL, SQLite und PostgreSQL verwendet. Mit SQLAlchemy können Sie jedoch DBs in "Pythonic" betreiben, ohne SQL direkt schreiben zu müssen.

Verwendung von SQLAlchemy

Legen Sie als einfachen Ablauf fest, welche Datenbank und wie eine Verbindung hergestellt werden soll. (Derjenige, der die Einstellungen enthält, wird als Motor bezeichnet.) Danach wird eine Zuordnung durchgeführt und eine Sitzung erstellt. Verwenden Sie diese Sitzung dann, um DB-Vorgänge auszuführen.

1. Erstellen Sie eine DB-Engine

from sqlalchemy import create_engine
engine=create_engine("{dialect}+{driver}://{username}:{password}@{host}:{port}/{database}?charset={charset_type})

Schreiben Sie wie folgt, um eine Instanz der Engine zu erstellen. Die Erläuterungen zu den einzelnen Elementen sind in der folgenden Tabelle aufgeführt.

Element         Erläuterung
dialect Geben Sie den DB-Typ an. SQLite, mysql, postgresql, oracle,wie mssql.
driver Geben Sie den Treiber an, der eine Verbindung zur Datenbank herstellen soll. Wenn nicht angegeben"default"Werden Sie eine DB-API.
username Geben Sie den Benutzernamen an, der eine Verbindung zur Datenbank herstellen kann.
password Geben Sie das Kennwort an, um eine Verbindung zur Datenbank herzustellen.
host Geben Sie den Hostnamen an. localhost oder IP-Adresse.
port Geben Sie die Portnummer an. Wenn Sie es nicht angeben, scheint es die Standardportnummer zu sein?
database Geben Sie den Namen der Datenbank an, zu der eine Verbindung hergestellt werden soll.
charset_type Geben Sie den Zeichencode an. utf8 oder so.

Zum Beispiel sieht es wie folgt aus. (Treiber, Port und Zeichensatztyp sind nicht angegeben.)

engine=create_engine("mysql://scott:tiger@localhost/foo")

2. Erstellen Sie eine Modellklasse (schreiben Sie eine Tabellendefinition).

Erstellen Sie zunächst eine Modellbasisklasse.

from sqlalchemy.ext.declarative import declarative_base
Base=declarative_base()

Durch Erweitern dieser Basisklasse wird sie dann zu einer Modellklasse, die von ORM verarbeitet werden kann. Schreiben Sie die Klasse beispielsweise wie folgt. Es ist auch möglich, Methoden beim Definieren einer Modellklasse hinzuzufügen.

from sqlalchemy.schema import Column
from sqlalchemy.types import Integer, String
class User(Base):
    __tablename__="user" #Geben Sie den Tabellennamen an
    user_id=Column(Integer, primary_key=True)
    first_name=Column(String(255))
    last_name=Column(String(255))
    age=Column(Integer)
    def full_name(self):#Methode zur Rückgabe des vollständigen Namens
        return "{self.first_name} {self.last_name}"

Die oben definierte Klasse ist eine Karte der in der folgenden Tabelle gezeigten Tabelle.

Field      Type        Null   Key   Default Extra
user_id int(11) NO PRI NULL auto_increment
first_name varchar(255) YES NULL
last_name varchar(255) YES NULL
age int(11) YES NULL

So erstellen Sie diese Tabelle in der Datenbank

Base.metadata.create_all(engine)

Dadurch wird ein Stapel von Tabellengruppen erstellt, die von Base erben. Die Details der Tabellendefinition sind wie folgt. Tabellendefinition in SQL Alchemy

Was sind Metadaten?

Das Wort Metadaten kam im obigen Code heraus, aber Metadaten sind ein Objekt, das verschiedene Informationen in der Datenbank enthält. Mit diesen Metadaten können Sie auch Tabellendefinitionen aus einer vorhandenen Datenbank abrufen.

3. Erstellen Sie eine Sitzung

SQLAlchemy führt Abfragen über Sitzungen aus. Erstens besteht eine Sitzung aus einer Reihe von Einheiten, die vom Herstellen einer Verbindung bis zum Trennen der Verbindung reichen. (Bild einer Zeichenfolge, die DB- und Python-Code verbindet)

Erstellen einer Sitzung Erstellen Sie eine Klasse mit Sessionmaker. (Wenn der zu verwendende Motor konstant ist, geben Sie ihn zu diesem Zeitpunkt an.)

from sqlalchemy.orm import sessionmaker
SessionClass=sessionmaker(engine) #Erstellen Sie eine Klasse, um eine Sitzung zu erstellen
session=SessionClass()

Die detaillierte Handhabung ist wie folgt. So behandeln Sie Sitzungen in SQL Alchemy

4. Führen Sie die CRUD-Verarbeitung durch

CRUD ist ein Sammelbegriff für die folgenden Funktionen. · Erstellen · Lesen ・ Aktualisieren ・ Zerstören

Beachten Sie, dass die Datenbank nur aktualisiert wird, wenn Sie die Sitzung schließen oder commit () explizit festlegen.

INSERT Wenn Sie der Sitzung ein neues Objekt hinzufügen (), wird es zu einem INSERT-Ziel.

user_a=User(first_name="first_a", last_name="last_a", age=20)
session.add(user_a)
session.commit()
user_id first_name last_name age
1 a a 20

SELECT Verwenden Sie die Abfrage, um Daten aus der Tabelle abzurufen.

users=session.query(User).all() #Gibt alle Datensätze in der Benutzertabelle als Array mit Klassen zurück
user=session.query(User).first() #Gibt den ersten Datensatz in der Benutzertabelle als Klasse zurück

Einzelheiten finden Sie unter Referenzen.

UPDATE Wenn Sie das aus der Sitzung abgerufene Objekt ändern, wird es UPDATEd sein.

user_a=session.query(User).get(1) #Benutzer oben hinzugefügt_id=1 Datensatz
user_a.age=10
session.commit()
user_id first_name last_name age
1 a a 10

DELETE Wenn Sie ein aus einer Sitzung abgerufenes Objekt löschen (), unterliegt es dem LÖSCHEN.

user_a=session.query(User).get(1)
session.delete(user_a)
session.commit()

Alternativ können Sie diejenigen löschen, die den Suchbedingungen entsprechen.

session.query(User).filter(User.user_id=1).delete()
session.commit()

5. Bei Verwendung einer vorhandenen Tabelle

In 3 haben Sie eine Klasse erstellt, die eine neue Tabelle zuordnet. Möglicherweise möchten Sie jedoch eine Klasse erstellen, die eine vorhandene Tabelle zuordnet. Die Prozedur besteht darin, Metadaten an die Basisklasse zu übergeben, \ _ \ _ Tabellenname__ mit dem vorhandenen Tabellennamen abzugleichen und das automatische Laden auf True zu setzen. Die Möglichkeit, Metadaten an die Basisklasse zu übergeben, besteht darin, die Engine beim Erstellen der Basisklasse zu übergeben.

Base=declarative_base(bind=engine)

Oder wie man Metadaten beim Erstellen einer Basisklasse übergibt

from sqlalchemy.schema import MetaData
meta=MetaData(engine)
meta.reflect() #Holen Sie sich Metadaten, Meta=MetaData(engine, reflect=True)Gleich wie
Base=declarative_base(metadata=meta) 

Oder wie man es nach dem Erstellen der Basisklasse gibt

Base=declarative_base()
Base.metadata.bind=engine 

Es gibt. Zum Beispiel, wenn eine Tabelle mit dem Tabellennamen \ _user besucht.

Base=declarative_base(bind=engine)
class Exisiting_user(Base): #Jeder Klassenname ist in Ordnung
    __tablename__="exisiting_user" 
    __table_args__={"autoload": True}

Und es ist ausreichend.

Verweise

Dieser Artikel wurde unter Bezugnahme auf die folgenden Informationen verfasst. ・ Offizielles DokumentPlaySQLAlchemy: Einführung in SQLAlchemyIch möchte die Datenbankdefinition mit SQL Alchemy genießen[Python ORM] Grundlegende Zusammenfassung der SQL-Abfragen mit SQL Alchemy

Recommended Posts

Grundlegende Verwendung von SQL Alchemy
Grundlegende Verwendung von Flask-Classy
Grundlegende Verwendung von Jinja2
Super grundlegende Verwendung von Pytest
Grundlegende Verwendung der PySimple-Benutzeroberfläche
Zusammenfassung der grundlegenden Verwendung von Pandas
Grundlegende Verwendung von Python-F-String
Grundlegende Verwendung von Btrfs in Arch Linux
Grundlegende Bedienung von Pandas
Zusammenfassung der Verwendung von pyenv
Verwendung von Python-Einheimischen ()
Grundkenntnisse in Python
[Einführung in Python] Grundlegende Verwendung von Lambda-Ausdrücken
(Anfänger) Grundlegende Verwendung des Datenspeichers von Google App Engine
[Einführung in Python] Grundlegende Verwendung der Bibliothek matplotlib
[Python] Richtige Verwendung der Karte
Bequeme Nutzungsübersicht von Flask
Grundlegender Ablauf der Erkennung von Anomalien
Verwendungshinweise für virtualenv Basic-Befehle
(Minimale) Verwendung von Django Logger
XPath-Grundlagen (1) - Grundkonzept von XPath
Beispiel für die Verwendung von Python Pickle
Einzeiliges Basisdiagramm von HoloViews
[Python] Richtige Verwendung von Join
Index der Verwendung bestimmter Pandas
[2020/06 neueste Version] Grundlegende Verwendung von Poesie, einem Abhängigkeitsmanagement-Tool für Python
Grundkenntnisse in Linux und Grundbefehle
Zusammenfassung der Grundkenntnisse von PyPy Teil 1
Zusammenfassung der grundlegenden Implementierung von PyTorch
Über den Grundtyp von Go
Grundlegende Grammatik des Python3-Systems (Wörterbuch)
[Python] Richtige Verwendung der if-Anweisung
Über das Verhalten von Yield_per von SqlAlchemy
sqlalchemy
[Python] Grundlegendes Muster und Verwendung der if-Anweisung (Vergleichsoperator und Boolescher Operator)
Grundlegendes Studium von OpenCV mit Python
[Linux] Überprüfung häufig verwendeter Basisbefehle 2
Scraping des Nutzungsverlaufs des Community-Zyklus
Grundlegendes Schreiben verschiedener Programmiersprachen (Self-Memo)
Die Verwendung von TensorBoard hat sich geringfügig geändert
Grundlegende Grammatik der Python3-Reihe (Zeichenkette)
Grundlegende Grammatik der Python3-Reihe (Liste, Tapple)
[Linux] Überprüfung häufig verwendeter Basisbefehle
Zusammenfassung der Verbindungsmethode nach DB von SQL Alchemy
Nicht logische Operatorverwendung von oder in Python
Python-Grundkurs (Ende 15)
Leistungsbewertung der Programmiersprache auf Basisebene
Grundlegende Grammatik des Python3-Systems (inklusive Notation)
Wie man Fabric installiert und wie man es benutzt
BESS Development Memo Teil 01: BESS-Installation und grundlegende Verwendung