.. SPDX-FileCopyrightText: 2021 cusy GmbH .. .. SPDX-License-Identifier: BSD-3-Clause SQLAlchemy ========== `SQLAlchemy `_ ist ein Python-SQL-Toolit und objektrelationaler Mapper. SQLAlchemy ist bekannt für sein ORM, wobei es verschiedene Muster für das objektrelationale Mapping bereitstellt, wobei Klassen auf verschiedene Weise auf die Datenbank abgebildet werden können. Das Objektmodell und das Datenbankschema sind von Anfang an sauber entkoppelt. SQLAlchemy unterscheidet sich grundlegend von anderen ORMs, da SQL und Details der Objekt-Relation nicht wegabstrahiert werden: alle Prozesse werden als eine Zusammenstellung einzelner Tools dargestellt. SQLAlchemy unterstützt neben PostgreSQL auch weitere Dialekte relationaler Datenbanken: +---------------+-------------------+---------------+-------------------+ | Dialekte | Python-Pakete | import | Dokumentation | +===============+===================+===============+===================+ | postgresql | psycopg2-binary | psycopg2 | `Installation`_ | +---------------+-------------------+---------------+-------------------+ | mysql | mysqlclient | MySQLdb | `README`_ | +---------------+-------------------+---------------+-------------------+ | mssql | pyodbc | pyodbc | `Wiki`_ | +---------------+-------------------+---------------+-------------------+ | oracle | cx_oracle | cx_Oracle | `cx_Oracle`_ | +---------------+-------------------+---------------+-------------------+ .. _`Installation`: https://www.psycopg.org/docs/install.html .. _`README`: https://github.com/PyMySQL/mysqlclient/blob/main/README.md .. _`Wiki`: https://github.com/mkleehammer/pyodbc/wiki .. _`cx_Oracle`: https://oracle.github.io/python-cx_Oracle/ Datenbankverbindung ------------------- .. code-block:: python from sqlalchemy import create_engine engine = create_engine("postgresql:///example", echo=True) Datenmodell ----------- .. code-block:: python from sqlalchemy import Column, ForeignKey, Integer, String from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship Base = declarative_base() class Address(Base): __tablename__ = "address" id = Column(Integer, primary_key=True) street = Column(String) zipcode = Column(String) country = Column(String, nullable=False) class Contact(Base): __tablename__ = "contact" id = Column(Integer, primary_key=True) firstname = Column(String, nullable=False) lastname = Column(String, nullable=False) email = Column(String, nullable=False) address_id = Column(Integer, ForeignKey(Address.id), nullable=False) address = relationship("Address") Tabellen erstellen ------------------ .. code-block:: python Base.metadata.create_all(engine) Create Session -------------- .. code-block:: python session = Session(engine) address = Address(street="Birnbaumweg 10", zipcode="79115", country="Germany") contact = Contact( firstname="Veit", lastname="Schiele", email="veit@cusy.io", address=address ) session.add(contact) session.commit() Read ---- .. code-block:: python contact = session.query(Contact).filter_by(email="veit@cusy.io").first() print(contact.firstname) contacts = session.query(Contact).all() for contact in contacts: print(contact.firstname) contacts = session.query(Contact).filter_by(email="veit@cusy.io").all() for contact in contacts: print(contact.firstname) Update ------ .. code-block:: python contact = session.query(Contact).filter_by(email="veit@cusy.io").first() contact.email = "info@veit-schiele.de" session.add(contact) session.commit() Delete ------ .. code-block:: python contact = ( session.query(Contact).filter_by(email="info@veit-schiele.de").first() ) session.delete(contact) session.commit() Erweiterungen ------------- `SQLAlchemy-Continuum `_ Versionierungs- und Revisionserweiterung für SQLAlchemy `SQLAlchemy-Utc `_ SQLAlchemy-Typ zum Speichern von `datetime.datetime`-Werten `SQLAlchemy-Utils `_ Verschiedene Utility-Funktionen, neue Datentypen und Hilfsprogramme für SQLAlchemy `DEPOT `_ Framework zur einfachen Speicherung und Bereitstellung von Dateien in Webanwendungen `SQLAlchemy-ImageAttach `_ SQLAlchemy-Erweiterung zum Anhängen von Bildern an Entitätsobjekte `SQLAlchemy-Searchable `_ Im Volltext durchsuchbare Modelle für SQLAlchemy .. seealso:: * `Awesome SQLAlchemy `_