Du hast Fragen? Wir haben Antworten! - Bald findet unser nächster Tag der offenen Tür statt!

Logo site

SQLAlchemy: Was ist das? Wozu dient es?

-
4
 Minuten Lesezeit
-
sql alchemy

Wie kann man die Flexibilität von SQL mit der Einfachheit und Effizienz der Programmiersprache Python kombinieren? Das ist die Ambition von SQLAlchemy. Hier erfährst du alles, was du über SQLAlchemy wissen musst, ein Werkzeug, das auf dem Prinzip des Object-Relational-Mapping (ORM) basiert.

Was ist das object-relational mapping-Prinzip?

SQLAlchemy ist ein Werkzeug, das auf dem Prinzip des Object-Relational Mapping (ORM) basiert.

ORM ist eine Computertechnik, die das Schema einer relationalen Datenbank (SQL) mit den Klassen einer objektorientierten Programmiersprache (hier Python) abgleicht, indem sie eine virtuelle Ebene zwischen uns und der Datenbank schafft, die wir dann direkt von einem Python-Skript aus benutzen und „abfragen“ können.

SQLAlchemy erleichtert also die Verbindung zwischen Python und SQL-Datenbanken, indem es Python-Klassenaufrufe automatisch in SQL-Anweisungen umwandelt. Dadurch ist es möglich, relationale Datenbanken auf pythonische Weise abzufragen.

💡Auch interessant:

Python
Wordcloud Python
Python oder R ?
Python für Dummies Teil 2
Python Schulung
Was ist Scala und wieso ist Python besser
Top der nativen Python Funktionen

Teile/Zerlegung Alchemy

SQL Alchemy besteht aus mehreren Teilen:

Die Engine, die benutzt wird, um sich mit der Datenbank zu verbinden und ihr unsere Abfragen mitzuteilen: create_engine().
Als Argument wird normalerweise eine Zeichenkette übergeben, die den Standort der Datenbank (lokaler Pfad oder URL), den Treiber/Dialekt der Datenbank und die Verbindungsargumente (die z. B. IDs sein können) angibt.

Bei der folgenden Anfrage werden wir SQLite und eine lokale Datenbank verwenden:

engine = create_engine(„sqlite:///base1.db“, echo=False).

Wir könnten aber auch PostGreSQl verwenden:

  • engine = create_engine(„postgresql:///base1.db“, echo=False).
  • DBAPI für „Python Database API Specification“ (Python-Datenbank-API-Spezifikation). SQLAlchemy baut wie andere Datenbankverbindungspakete auf dieser globalen Schnittstelle auf und fügt ihr ein Overlay mit seinen spezifischen Diensten hinzu.
  • SQLAlchemy unterstützt auch den DML-Teil (Data Modification Language) von SQL, d. h. die elementaren Operationen zum Ändern von Tabellen, die als CRUD-Operationen (Create, Read, Update, Delete) bezeichnet werden.

 

SQLAlchemy bildet die SQL-Statements INSERT, UPDATE und DELETE mithilfe des ORM-Mechanismus auf seine eigenen Methoden ab: insert, update und delete. So können Tabellen objektorientiert verändert werden, wie das folgende Beispiel zeigt.

Du stellst über .connect() eine Verbindung zur Datenbank her und gibst dann SQL-Anweisungen (INSERT, um eine Zeile zu erstellen, DELETE, um sie zu löschen, SELECT für einfaches Lesen) gefolgt von .execute(), um sie an die Datenbank zu senden.

Es ist üblich, sich mit Metadaten und einem strikten Tabellenschema zu beschäftigen, wenn man relationale DBs (Datenbanken) verwendet.

SQL alchemy stellt vordefinierte Klassen zur Verfügung, um die Data Definition Language (DDL) zu erleichtern, d. h. den Teil von SQL, der sich auf die Erstellung von Schemata für relationale Datenbanken (Typ, Schlüssel usw.) bezieht.

Die Klasse Column steht zum Beispiel für ein Feld in der Tabelle, Integer gibt an, dass das Feld vom Typ „INT“ ist, und String, dass es sich um ein „varchar“ handelt. Die Klasse ForeignKey wiederum gibt an, dass die Spalte ein Fremdschlüssel ist. Alle diese Klassen erben von einer globalen Klasse namens MetaData.

In diesem zweiten Beispiel erstellen wir eine neue Tabelle Locations, die Orte aus neuen Regionen enthält, und führen CRUD-Operationen darauf aus.

Zu diesem Zweck stellt uns SQLAlchemy Klassen wie Column oder Table zur Verfügung, die die Arbeit vorab erledigen. Es fällt auf, dass Python-Funktionen wie .insert() , update, .where oder delete anstelle der SQL-Sprache verwendet werden.

Die Syntax elementarer Funktionen wie engine, .connect(),execute kann jedoch viele abschrecken, da man seinen eigenen SQL-Code bereitstellen muss, um mit seiner Datenbank zu interagieren. Eine Sitzung ermöglicht es uns, dieselben Operationen (Lesen, Schreiben und Löschen) mit Hilfe von einfacher zu handhabenden Python-Objekten durchzuführen, die dann auf die Datenbank abgebildet werden.

Sitzungen werden daher für das ORM (Object Relationship Management) verwendet und verfolgen auch die Objekte, die während der Sitzung geändert wurden.

Ein Beispiel, um die praktische Seite der Schnittstelle zu veranschaulichen:

Wir führen die gleichen Operationen wie oben aus, aber wir stellen fest, dass die Syntax viel leichter ist: sessionmaker wird verwendet, um unsere Sitzung zu definieren, die es ermöglicht, nur Python-Methoden zu verwenden, um Anweisungen an die Datenbank über eine Python-Klasse zu übermitteln, hier Pokemon, die die Tabelle pokedex über den Parameter __tablename__ verwendet.

Man kann dann über die query()-Methode Informationen aus der Datenbank abrufen, die Ergebnisse mit filter_by() filtern und anschließend das Objekt mit der delete()-Methode aus der Sitzung löschen.

Am Ende des letzten Beispiels soll das Konzept des Upserts veranschaulicht werden.

Wir wollen unserer Datenbank mehrere Pokémon hinzufügen, sind uns aber nicht sicher, ob sie bereits einige enthält oder nicht. Um zu vermeiden, dass wir doppelte Einträge hinzufügen, verwenden wir die Funktion merge(), die die Informationen der bereits in der Datenbank vorhandenen Pokémon aktualisiert (update) oder eine neue Zeile in die Tabelle einfügt (insert).

Wofür wird SQLAlchemy verwendet?

ORM und SQLAlchemy im Allgemeinen eignen sich für die folgenden Situationen:

  • Die grundlegende Verwendung von CRUD-Operationen.
  • Das Schreiben von besseren Tests und Data Fixtures für die Datenkonsistenz,
    SQLAlchemy ist DataBase agnostisch.
  • Das bedeutet, dass unser Python-Code für alle SQL-Umgebungen und -Dialekte wie SQlite, PostGReSQL oder Oracle derselbe sein wird.
  • Das verbessert die Interoperabilität mit dem Rest deiner Anwendung und man kann so das Datenbanksystem wechseln, ohne seinen Code ändern zu müssen.
  • Anstatt zwischen verschiedenen SQL-Dialekten zu jonglieren, ermöglicht uns das Open-Source-Toolkit SQL Alchemy, unseren Workflow zu rationalisieren und unsere Daten effizient in der Sprache Python zu verarbeiten.
  • Das Schreiben von Beschränkungen auf das Tabellenschema direkt aus unserem Python-Skript heraus.
  • Die Darstellung relationaler Datenbanken durch Python-Klassen ermöglicht es, die Qualität des Codes zu verbessern, Duplikate zu vermeiden, was die Wartung erleichtert, aber auch die Speicherung von Objekten in einem Speichercache ermöglicht. Dies beschleunigt den Datenzugriff, indem es die Anzahl der Abfragen reduziert und die Leistung erhöht.
  • Wenn man keine in der Cloud gehostete Datenbank wie ein Datawarehouse hat, kann man über SQLAlchemy die Open-Source-Datenbank PostGreSQL verwenden.

Es ist jedoch zu beachten, dass ORM für die Verarbeitung großer Datenmengen und ETL-Prozesse nicht geeignet ist. In letzterem Fall wäre dbt besser geeignet (Pakete, Makros, Tests).

Fazit

Du bist begeistert von SQL, Python und der Welt der Daten und möchtest die wichtigsten Werkzeuge wie dbt, Spark oder SQLAlchemy kennen lernen?

Nimm an unseren Data Analyst-, Data Scientist- oder Analytics Engineer-Kursen bei DataScientest teil, um deine Kenntnisse in diesem Bereich durch die Big Data Sprint-Kurse zu verbessern.

DataScientest News

Melde Dich jetzt für unseren Newsletter an, um unsere Guides, Tutorials und die neuesten Entwicklungen im Bereich Data Science direkt per E-Mail zu erhalten.

Möchtest Du informiert bleiben?

Schreib uns Deine E-Mail-Adresse, damit wir Dir die neuesten Artikel zum Zeitpunkt der Veröffentlichung zusenden können!
icon newsletter

DataNews

Starte Deine Karriere im Bereich Data: Erhalte regelmäßig Insiderwissen und wertvolle Karrieretipps in Deinem Posteingang.