{"id":176642,"date":"2026-01-28T11:24:07","date_gmt":"2026-01-28T10:24:07","guid":{"rendered":"https:\/\/liora.io\/de\/?p=176642"},"modified":"2026-02-23T14:14:04","modified_gmt":"2026-02-23T13:14:04","slug":"sqlalchemy-was-ist-das-wozu-dient-es","status":"publish","type":"post","link":"https:\/\/liora.io\/de\/sqlalchemy-was-ist-das-wozu-dient-es","title":{"rendered":"SQLAlchemy: Was ist das? Wozu dient es?"},"content":{"rendered":"\n<p><strong>Wie kann man die Flexibilit\u00e4t von SQL mit der Einfachheit und Effizienz der Programmiersprache Python kombinieren?<br>Das ist die Ambition von SQLAlchemy. Hier erf\u00e4hrst du alles, was du \u00fcber SQLAlchemy wissen musst, ein Werkzeug, das auf dem Prinzip des Object-Relational-Mapping (ORM) basiert.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-was-ist-das-object-relational-mapping-prinzip\">Was ist das object-relational mapping-Prinzip?<\/h2>\n\n\n\n<p><strong>SQLAlchemy<\/strong> ist ein Werkzeug, das auf dem Prinzip des Object-Relational Mapping (ORM) basiert.<\/p>\n\n\n\n<p><strong>ORM<\/strong> 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 &#8222;abfragen&#8220; k\u00f6nnen.<\/p>\n\n\n\n<p><strong>SQLAlchemy<\/strong> erleichtert also die Verbindung zwischen Python und <a href=\"https:\/\/liora.io\/de\/sql-alles-uber-die-datenbanksprache\">SQL-Datenbanken<\/a>, indem es Python-Klassenaufrufe automatisch in SQL-Anweisungen umwandelt. Dadurch ist es m\u00f6glich, relationale Datenbanken auf pythonische Weise abzufragen.<\/p>\n\n\n\n<p>?Auch interessant:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><a href=\"https:\/\/liora.io\/de\/python\" target=\"_blank\" rel=\"noopener\">Python<\/a><\/td><\/tr><tr><td><a href=\"https:\/\/liora.io\/de\/wordcloud-python\" target=\"_blank\" rel=\"noopener\">Wordcloud Python<\/a><\/td><\/tr><tr><td><a href=\"https:\/\/liora.io\/de\/python-oder-r\" target=\"_blank\" rel=\"noopener\">Python oder R ?<\/a><\/td><\/tr><tr><td><a href=\"https:\/\/liora.io\/de\/python-fuer-dummies-teil-2\" target=\"_blank\" rel=\"noopener\">Python f\u00fcr Dummies Teil 2<\/a><\/td><\/tr><tr><td><a href=\"https:\/\/liora.io\/de\/python-schulung\" target=\"_blank\" rel=\"noopener\">Python Schulung<\/a><\/td><\/tr><tr><td><a href=\"https:\/\/liora.io\/de\/scala-was-ist-diese-programmiersprache-und-wieso-ist-python-besser\" target=\"_blank\" rel=\"noopener\">Was ist Scala und wieso ist Python besser<\/a><\/td><\/tr><tr><td><a href=\"https:\/\/liora.io\/de\/top-10-der-nativen-python-funktionen\" target=\"_blank\" rel=\"noopener\">Top der nativen Python Funktionen<\/a><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-teile-zerlegung-alchemy\">Teile\/Zerlegung Alchemy<\/h2>\n\n\n\n<p><strong>SQL Alchemy<\/strong> besteht aus mehreren Teilen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Die Engine, die benutzt wird, um sich mit der <a href=\"https:\/\/liora.io\/de\/mysql-eine-relationale-datenverwaltungssoftware\">Datenbank<\/a> zu verbinden und ihr unsere Abfragen mitzuteilen: create_engine(). Als Argument wird normalerweise eine Zeichenkette \u00fcbergeben, die den Standort der Datenbank (lokaler Pfad oder URL), den Treiber\/Dialekt der Datenbank und die Verbindungsargumente (die z. B. IDs sein k\u00f6nnen) angibt. Bei der folgenden Anfrage werden wir SQLite und eine lokale Datenbank verwenden:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-preformatted\">engine = create_engine(\"sqlite:\/\/\/base1.db\", echo=False).<\/pre>\n\n\n\n<div style=\"height:1px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Wir k\u00f6nnten aber auch PostGreSQl verwenden:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>engine = create_engine(&#8222;postgresql:\/\/\/base1.db&#8220;, echo=False).<\/li>\n\n\n\n<li>DBAPI f\u00fcr &#8222;Python Database API Specification&#8220; (Python-Datenbank-API-Spezifikation). SQLAlchemy baut wie andere Datenbankverbindungspakete auf dieser globalen Schnittstelle auf und f\u00fcgt ihr ein Overlay mit seinen spezifischen Diensten hinzu.<\/li>\n\n\n\n<li>SQLAlchemy unterst\u00fctzt auch den DML-Teil (Data Modification Language) von SQL, d. h. die elementaren Operationen zum \u00c4ndern von Tabellen, die als CRUD-Operationen (Create, Read, Update, Delete) bezeichnet werden.<\/li>\n<\/ul>\n\n\n\n<p><strong>SQLAlchemy<\/strong> bildet die SQL-Statements INSERT, UPDATE und DELETE mithilfe des ORM-Mechanismus auf seine eigenen Methoden ab: insert, update und delete. So k\u00f6nnen Tabellen objektorientiert ver\u00e4ndert werden, wie das folgende Beispiel zeigt.<\/p>\n\n\n\n<p>Du stellst \u00fcber .connect() eine Verbindung zur Datenbank her und gibst dann SQL-Anweisungen (INSERT, um eine Zeile zu erstellen, DELETE, um sie zu l\u00f6schen, SELECT f\u00fcr einfaches Lesen) gefolgt von .execute(), um sie an die Datenbank zu senden.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Es ist \u00fcblich, sich mit Metadaten und einem strikten Tabellenschema zu besch\u00e4ftigen, wenn man <a href=\"https:\/\/liora.io\/de\/no-sql-nicht-relationale-datenbanken\">relationale DBs (Datenbanken)<\/a> verwendet.<\/li>\n\n\n\n<li>SQL alchemy stellt vordefinierte Klassen zur Verf\u00fcgung, um die Data Definition Language (DDL) zu erleichtern, d. h. den Teil von SQL, der sich auf die Erstellung von Schemata f\u00fcr relationale Datenbanken (Typ, Schl\u00fcssel usw.) bezieht.<\/li>\n\n\n\n<li>Die Klasse Column steht zum Beispiel f\u00fcr ein Feld in der Tabelle, Integer gibt an, dass das Feld vom Typ &#8222;INT&#8220; ist, und String, dass es sich um ein &#8222;varchar&#8220; handelt. Die Klasse ForeignKey wiederum gibt an, dass die Spalte ein Fremdschl\u00fcssel ist. Alle diese Klassen erben von einer globalen Klasse namens MetaData.<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\" style=\"margin-top:var(--wp--preset--spacing--columns);margin-bottom:var(--wp--preset--spacing--columns)\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/de\/weiterbildung\/data-ki\">SQLAlchemy lernen<\/a><\/div>\n<\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In diesem zweiten Beispiel erstellen wir eine neue Tabelle Locations, die Orte aus neuen Regionen enth\u00e4lt, und f\u00fchren CRUD-Operationen darauf aus.<\/li>\n\n\n\n<li>Zu diesem Zweck stellt uns<strong> SQLAlchemy<\/strong> Klassen wie Column oder Table zur Verf\u00fcgung, die die Arbeit vorab erledigen. Es f\u00e4llt auf, dass <a href=\"https:\/\/liora.io\/de\/top-10-der-nativen-python-funktionen\">Python-Funktionen wie .insert() , update, .where oder delete<\/a> anstelle der SQL-Sprache verwendet werden.<\/li>\n\n\n\n<li>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\u00f6glicht es uns, dieselben Operationen (Lesen, Schreiben und L\u00f6schen) mit Hilfe von einfacher zu handhabenden<strong> Python-Objekten<\/strong> durchzuf\u00fchren, die dann auf die Datenbank abgebildet werden.<\/li>\n\n\n\n<li>Sitzungen werden daher f\u00fcr das ORM (Object Relationship Management) verwendet und verfolgen auch die Objekte, die w\u00e4hrend der Sitzung ge\u00e4ndert wurden.<\/li>\n<\/ul>\n\n\n\n<p>Ein Beispiel, um die praktische Seite der Schnittstelle zu veranschaulichen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Wir f\u00fchren 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\u00f6glicht, nur Python-Methoden zu verwenden, um Anweisungen an die Datenbank \u00fcber eine Python-Klasse zu \u00fcbermitteln, hier Pokemon, die die Tabelle pokedex \u00fcber den Parameter __tablename__ verwendet.<\/li>\n\n\n\n<li>Man kann dann \u00fcber die<strong> query()-Methode<\/strong> Informationen aus der Datenbank abrufen, die Ergebnisse mit filter_by() filtern und anschlie\u00dfend das Objekt mit der delete()-Methode aus der Sitzung l\u00f6schen.<\/li>\n\n\n\n<li>Am Ende des letzten Beispiels soll das Konzept des Upserts veranschaulicht werden.<\/li>\n\n\n\n<li>Wir wollen unserer Datenbank mehrere Pok\u00e9mon hinzuf\u00fcgen, sind uns aber nicht sicher, ob sie bereits einige enth\u00e4lt oder nicht. Um zu vermeiden, dass wir doppelte Eintr\u00e4ge hinzuf\u00fcgen, verwenden wir die Funktion merge(), die die Informationen der bereits in der Datenbank vorhandenen Pok\u00e9mon aktualisiert (update) oder eine neue Zeile in die Tabelle einf\u00fcgt (insert).<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-wofur-wird-sqlalchemy-verwendet\">Wof\u00fcr wird SQLAlchemy verwendet?<\/h2>\n\n\n\n<p><strong>ORM und SQLAlchemy<\/strong> im Allgemeinen eignen sich f\u00fcr die folgenden Situationen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Die grundlegende Verwendung von <a href=\"https:\/\/liora.io\/de\/crud-definition-funktionsweise\">CRUD-Operationen.<\/a><\/li>\n\n\n\n<li>Das Schreiben von besseren Tests und Data Fixtures f\u00fcr die Datenkonsistenz,<br>SQLAlchemy ist DataBase agnostisch.<\/li>\n\n\n\n<li>Das bedeutet, dass unser Python-Code f\u00fcr alle SQL-Umgebungen und -Dialekte wie SQlite, PostGReSQL oder Oracle derselbe sein wird.<\/li>\n\n\n\n<li>Das verbessert die Interoperabilit\u00e4t mit dem Rest deiner Anwendung und man kann so das Datenbanksystem wechseln, ohne seinen Code \u00e4ndern zu m\u00fcssen.<\/li>\n\n\n\n<li>Anstatt zwischen verschiedenen SQL-Dialekten zu jonglieren, erm\u00f6glicht uns das Open-Source-Toolkit SQL Alchemy, unseren Workflow zu rationalisieren und unsere Daten effizient in der Sprache Python zu verarbeiten.<\/li>\n\n\n\n<li>Das Schreiben von Beschr\u00e4nkungen auf das Tabellenschema direkt aus unserem Python-Skript heraus.<\/li>\n\n\n\n<li>Die Darstellung relationaler Datenbanken durch <strong>Python-Klassen<\/strong> erm\u00f6glicht es, die Qualit\u00e4t des Codes zu verbessern, Duplikate zu vermeiden, was die Wartung erleichtert, aber auch die Speicherung von Objekten in einem Speichercache erm\u00f6glicht. Dies beschleunigt den Datenzugriff, indem es die Anzahl der Abfragen reduziert und die Leistung erh\u00f6ht.<\/li>\n\n\n\n<li>Wenn man keine in der Cloud gehostete Datenbank wie ein Datawarehouse hat, kann man \u00fcber SQLAlchemy die Open-Source-Datenbank <a href=\"\/\">PostGreSQL<\/a> verwenden.<\/li>\n<\/ul>\n\n\n\n<p>Es ist jedoch zu beachten, dass<strong> ORM<\/strong> f\u00fcr die Verarbeitung gro\u00dfer Datenmengen und ETL-Prozesse nicht geeignet ist. In letzterem Fall w\u00e4re dbt besser geeignet (Pakete, Makros, Tests).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-fazit\">Fazit<\/h2>\n\n\n\n<p>Du bist begeistert von SQL, Python und der Welt der Daten und m\u00f6chtest die wichtigsten Werkzeuge wie dbt, <a href=\"https:\/\/liora.io\/de\/apache-spark\">Spark<\/a> oder SQLAlchemy kennen lernen?<\/p>\n\n\n\n<p>Nimm an unseren <a href=\"https:\/\/liora.io\/de\/weiterbildung\/data-ki\/data-analyst-bootcamp\">Data Analyst<\/a>-, <a href=\"https:\/\/liora.io\/de\/weiterbildung\/data-ki\/data-scientist\">Data Scientist<\/a>&#8211; oder Analytics Engineer-Kursen bei Liora teil, um deine Kenntnisse in diesem Bereich durch die Big Data Sprint-Kurse zu verbessern.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/de\/weiterbildung\/data-ki\">Entdecke unsere Weiterbildungen<\/a><\/div>\n<\/div>\n\n\n\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Was ist das object-relational mapping-Prinzip?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Object-Relational Mapping (ORM) gleicht das Schema einer relationalen Datenbank mit den Klassen einer objektorientierten Sprache (Python) ab. Es schafft eine virtuelle Ebene zwischen Programm und Datenbank, sodass Python-Klassenaufrufe automatisch in SQL-Anweisungen umgewandelt werden. Dadurch k\u00f6nnen relationale Datenbanken 'pythonisch' abgefragt werden.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Teile\/Zerlegung Alchemy\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"SQLAlchemy besteht aus mehreren Komponenten: Engine (Verbindung zur Datenbank mit create_engine), DBAPI (Python-Datenbank-API-Schnittstelle), DML-Unterst\u00fctzung (CRUD-Operationen mit insert, update, delete), Metadaten und Tabellenschema (Klassen wie Column, Integer, String, ForeignKey), Sitzungen (sessionmaker f\u00fcr ORM mit Python-Methoden statt SQL). Die Syntax reicht von einfachen execute()-Aufrufen bis zu komfortablen Sitzungen mit query(), filter_by() und merge() f\u00fcr Upserts.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Wof\u00fcr wird SQLAlchemy verwendet?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"SQLAlchemy eignet sich f\u00fcr: grundlegende CRUD-Operationen, bessere Tests und Data Fixtures, datenbankagnostischen Code (gleicher Code f\u00fcr SQLite, PostgreSQL, Oracle), Workflow-Optimierung und effiziente Datenverarbeitung in Python, Constraints-Definition direkt im Python-Skript, Codequalit\u00e4t durch Vermeidung von Duplikaten und Caching f\u00fcr schnelleren Datenzugriff, Nutzung von PostgreSQL ohne Cloud-Datawarehouse. Nicht geeignet f\u00fcr gro\u00dfe Datenmengen und ETL-Prozesse \u2013 daf\u00fcr ist dbt besser.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Fazit\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"F\u00fcr Vertiefung in SQL, Python und Datenbank-Tools (dbt, Spark, SQLAlchemy) bieten die Data Analyst-, Data Scientist- und Analytics Engineer-Kurse bei Liora mit Big Data Sprint-Modulen die passende Weiterbildung.\"\n      }\n    }\n  ]\n}\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Wie kann man die Flexibilit\u00e4t von SQL mit der Einfachheit und Effizienz der Programmiersprache Python kombinieren? Das ist die Ambition von SQLAlchemy. Hier erf\u00e4hrst du alles, was du \u00fcber SQLAlchemy wissen musst, ein Werkzeug, das auf dem Prinzip des Object-Relational-Mapping (ORM) basiert.<\/p>\n","protected":false},"author":88,"featured_media":219435,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"editor_notices":[],"footnotes":""},"categories":[2476],"class_list":["post-176642","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud-dev"],"acf":[],"_links":{"self":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/176642","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/users\/88"}],"replies":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/comments?post=176642"}],"version-history":[{"count":5,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/176642\/revisions"}],"predecessor-version":[{"id":219440,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/176642\/revisions\/219440"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media\/219435"}],"wp:attachment":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media?parent=176642"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/categories?post=176642"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}