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.
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.
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.
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.
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")
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
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.
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
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()
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.
Dieser Artikel wurde unter Bezugnahme auf die folgenden Informationen verfasst. ・ Offizielles Dokument ・ PlaySQLAlchemy: Einführung in SQLAlchemy ・ Ich möchte die Datenbankdefinition mit SQL Alchemy genießen ・ [Python ORM] Grundlegende Zusammenfassung der SQL-Abfragen mit SQL Alchemy
Recommended Posts