SQLModel
SQLModel, SQL-Datenbanken in Python, entwickelt für Einfachheit, Kompatibilität und Robustheit.
Dokumentation: https://sqlmodel.de
Quellcode: https://github.com/fastapi/sqlmodel
SQLModel ist eine Bibliothek für die Interaktion mit SQL-Datenbanken aus Python-Code heraus, mit Python-Objekten. Sie ist intuitiv, einfach zu bedienen, hochgradig kompatibel und robust.
SQLModel basiert auf Python-Typannotationen und wird von Pydantic und SQLAlchemy angetrieben.
Die Hauptmerkmale sind
- Intuitiv zu schreiben: Tolle Editor-Unterstützung. Vervollständigung überall. Weniger Zeit mit Debugging. Entwickelt für einfache Bedienung und schnelles Erlernen. Weniger Zeit mit dem Lesen von Dokumentationen.
- Einfach zu bedienen: Es hat sinnvolle Standardwerte und leistet viel Arbeit im Hintergrund, um den von Ihnen geschriebenen Code zu vereinfachen.
- Kompatibel: Es wurde entwickelt, um mit FastAPI, Pydantic und SQLAlchemy kompatibel zu sein.
- Erweiterbar: Sie haben die volle Leistung von SQLAlchemy und Pydantic im Hintergrund.
- Kurz: Reduzieren Sie Code-Duplizierung. Eine einzige Typannotation erledigt viel Arbeit. Keine Notwendigkeit, Modelle in SQLAlchemy und Pydantic zu duplizieren.
Sponsoren¶
SQL-Datenbanken in FastAPI¶
SQLModel wurde entwickelt, um die Interaktion mit SQL-Datenbanken in FastAPI-Anwendungen zu vereinfachen. Es wurde vom selben Autor entwickelt. 😁
Es kombiniert SQLAlchemy und Pydantic und versucht, den von Ihnen geschriebenen Code so weit wie möglich zu vereinfachen, wodurch Sie die **Code-Duplizierung auf ein Minimum** reduzieren können, aber gleichzeitig die **beste Entwicklererfahrung** erzielen.
SQLModel ist tatsächlich eine dünne Schicht über Pydantic und SQLAlchemy, sorgfältig entwickelt, um mit beiden kompatibel zu sein.
Voraussetzungen¶
Eine aktuelle und derzeit unterstützte Version von Python.
Da SQLModel auf Pydantic und SQLAlchemy basiert, sind diese erforderlich. Sie werden automatisch installiert, wenn Sie SQLModel installieren.
Installation¶
Stellen Sie sicher, dass Sie eine virtuelle Umgebung erstellen, diese aktivieren und dann SQLModel installieren, zum Beispiel mit
$ pip install sqlmodel
---> 100%
Successfully installed sqlmodel
Beispiel¶
Für eine Einführung in Datenbanken, SQL und alles andere, siehe die SQLModel-Dokumentation.
Hier ist ein kurzes Beispiel. ✨
Eine SQL-Tabelle¶
Stellen Sie sich vor, Sie haben eine SQL-Tabelle namens hero mit
idnamesecret_nameage
Und Sie möchten diese Daten haben
| id | name | secret_name | age |
|---|---|---|---|
| 1 | Deadpond | Dive Wilson | null |
| 2 | Spider-Boy | Pedro Parqueador | null |
| 3 | Rusty-Man | Tommy Sharp | 48 |
Ein SQLModel-Modell erstellen¶
Dann könnten Sie ein SQLModel-Modell wie dieses erstellen
from sqlmodel import Field, SQLModel
class Hero(SQLModel, table=True):
id: int | None = Field(default=None, primary_key=True)
name: str
secret_name: str
age: int | None = None
Diese Klasse Hero ist ein SQLModel-Modell, das Äquivalent einer SQL-Tabelle im Python-Code.
Und jedes dieser Klassenattribute ist das Äquivalent jeder Tabellenspalte.
Zeilen erstellen¶
Dann könnten Sie jede Zeile der Tabelle als Instanz des Modells erstellen
hero_1 = Hero(name="Deadpond", secret_name="Dive Wilson")
hero_2 = Hero(name="Spider-Boy", secret_name="Pedro Parqueador")
hero_3 = Hero(name="Rusty-Man", secret_name="Tommy Sharp", age=48)
Auf diese Weise können Sie konventionellen Python-Code mit Klassen und Instanzen verwenden, die Tabellen und Zeilen darstellen, und auf diese Weise mit der SQL-Datenbank kommunizieren.
Editor-Unterstützung¶
Alles ist so konzipiert, dass Sie die bestmögliche Entwicklererfahrung mit der besten Editor-Unterstützung erhalten.
Einschließlich Autovervollständigung

Und Inline-Fehler

In die Datenbank schreiben¶
Sie können viel mehr über SQLModel lernen, indem Sie schnell dem Tutorial folgen. Aber wenn Sie jetzt einen Vorgeschmack darauf bekommen möchten, wie Sie all das zusammenfügen und in die Datenbank speichern können, können Sie Folgendes tun:
from sqlmodel import Field, Session, SQLModel, create_engine
class Hero(SQLModel, table=True):
id: int | None = Field(default=None, primary_key=True)
name: str
secret_name: str
age: int | None = None
hero_1 = Hero(name="Deadpond", secret_name="Dive Wilson")
hero_2 = Hero(name="Spider-Boy", secret_name="Pedro Parqueador")
hero_3 = Hero(name="Rusty-Man", secret_name="Tommy Sharp", age=48)
engine = create_engine("sqlite:///database.db")
SQLModel.metadata.create_all(engine)
with Session(engine) as session:
session.add(hero_1)
session.add(hero_2)
session.add(hero_3)
session.commit()
Damit wird eine SQLite-Datenbank mit den 3 Helden gespeichert.
Aus der Datenbank auswählen¶
Dann könnten Sie Abfragen schreiben, um aus derselben Datenbank auszuwählen, zum Beispiel mit
from sqlmodel import Field, Session, SQLModel, create_engine, select
class Hero(SQLModel, table=True):
id: int | None = Field(default=None, primary_key=True)
name: str
secret_name: str
age: int | None = None
engine = create_engine("sqlite:///database.db")
with Session(engine) as session:
statement = select(Hero).where(Hero.name == "Spider-Boy")
hero = session.exec(statement).first()
print(hero)
Editor-Unterstützung überall¶
SQLModel wurde sorgfältig entwickelt, um Ihnen die beste Entwicklererfahrung und Editor-Unterstützung zu bieten, auch nach dem Auswählen von Daten aus der Datenbank

SQLAlchemy und Pydantic¶
Diese Klasse Hero ist ein SQLModel-Modell.
Aber gleichzeitig ✨ ist es ein SQLAlchemy-Modell ✨. Sie können es also kombinieren und mit anderen SQLAlchemy-Modellen verwenden, oder Sie könnten SQLAlchemy-Anwendungen leicht zu SQLModel migrieren.
Und gleichzeitig ✨ ist es auch ein Pydantic-Modell ✨. Sie können Vererbung damit verwenden, um alle Ihre Datenmodelle zu definieren und gleichzeitig Code-Duplizierung zu vermeiden. Das macht es sehr einfach, es mit FastAPI zu verwenden.
Lizenz¶
Dieses Projekt wird unter den Bedingungen der MIT-Lizenz vertrieben.

