SQLAlchemy
The Database Toolkit for Python
Das Datenbank-Toolkit für Python
  • Startseite
  • Funktionen
    • Philosophieerklärung
    • Funktionsübersicht
    • Testimonials
  • Neuigkeiten
  • Dokumentation
    • Aktuelle Dokumentation (Version 2.0)

    • Dokumentation nach Version
    • Version 2.1 (Entwicklung)
    • Version 2.0
    • Version 1.4
    • Version 1.3

    • Vorträge und Tutorials
    • Übersicht veröffentlichter Inhalte
  • Community
    • Support erhalten
    • Teilnehmen
    • Entwickeln
    • Verhaltenskodex
    • Github
  • Download
    • Download
    • Aktuelle Release-Serie (2.0)
    • Wartungs-Release (1.4)
    • Entwicklungszugang
    • Lizenz
    • Versionsnummerierung
    • Release-Status
Release: 2.0.39 aktuelles Release | Release-Datum: 11. März 2025

SQLAlchemy 2.0 Dokumentation

SQLAlchemy 2.0 Dokumentation

aktuelles Release

Startseite | Diese Dokumentation herunterladen

Häufig gestellte Fragen

  • Installation
  • Verbindungen / Engines
  • MetaData / Schema¶
    • Mein Programm hängt, wenn ich sage table.drop() / metadata.drop_all()
    • Unterstützt SQLAlchemy ALTER TABLE, CREATE VIEW, CREATE TRIGGER, Schema-Upgrade-Funktionalität?
    • Wie kann ich Table-Objekte nach ihrer Abhängigkeit sortieren?
    • Wie bekomme ich die CREATE TABLE/ DROP TABLE Ausgabe als String?
    • Wie kann ich Table/Column unterklassifizieren, um bestimmte Verhaltensweisen/Konfigurationen bereitzustellen?
  • SQL-Ausdrücke
  • ORM-Konfiguration
  • Performance
  • Sessions / Abfragen
  • Probleme bei der Integration von Drittanbietern

Projektversionen

  • 2.0.39

Startseite | Diese Dokumentation herunterladen

  • Vorher: Connections / Engines
  • Nächste: SQL-Ausdrücke
  • Nach oben: Startseite
    • Häufig gestellte Fragen
  • Auf dieser Seite
    • MetaData / Schema
      • Mein Programm hängt, wenn ich sage table.drop() / metadata.drop_all()
      • Unterstützt SQLAlchemy ALTER TABLE, CREATE VIEW, CREATE TRIGGER, Schema-Upgrade-Funktionalität?
      • Wie kann ich Table-Objekte nach ihrer Abhängigkeit sortieren?
      • Wie bekomme ich die CREATE TABLE/ DROP TABLE Ausgabe als String?
      • Wie kann ich Table/Column unterklassifizieren, um bestimmte Verhaltensweisen/Konfigurationen bereitzustellen?

MetaData / Schema¶

  • Mein Programm hängt, wenn ich sage table.drop() / metadata.drop_all()

  • Unterstützt SQLAlchemy ALTER TABLE, CREATE VIEW, CREATE TRIGGER, Schema-Upgrade-Funktionalität?

  • Wie kann ich Table-Objekte nach ihrer Abhängigkeit sortieren?

  • Wie bekomme ich die CREATE TABLE/ DROP TABLE Ausgabe als String?

  • Wie kann ich Table/Column unterklassifizieren, um bestimmte Verhaltensweisen/Konfigurationen bereitzustellen?

Mein Programm hängt, wenn ich sage table.drop() / metadata.drop_all()¶

Dies entspricht normalerweise zwei Bedingungen: 1. Verwendung von PostgreSQL, das sehr streng bei Tabellensperren ist, und 2. Sie haben noch eine Verbindung geöffnet, die Sperren auf der Tabelle enthält und sich von der Verbindung unterscheidet, die für die DROP-Anweisung verwendet wird. Hier ist die minimalistischste Version des Musters

connection = engine.connect()
result = connection.execute(mytable.select())

mytable.drop(engine)

Oben ist eine Verbindung aus einem Verbindungspool noch ausgecheckt; darüber hinaus behält das obige Ergebnisobjekt auch einen Link zu dieser Verbindung. Wenn "implizite Ausführung" verwendet wird, hält das Ergebnis diese Verbindung offen, bis das Ergebnisobjekt geschlossen wird oder alle Zeilen erschöpft sind.

Der Aufruf von mytable.drop(engine) versucht, DROP TABLE über eine zweite Verbindung auszugeben, die vom Engine bezogen wird, was zu Sperren führt.

Die Lösung besteht darin, alle Verbindungen zu schließen, bevor DROP TABLE ausgegeben wird

connection = engine.connect()
result = connection.execute(mytable.select())

# fully read result sets
result.fetchall()

# close connections
connection.close()

# now locks are removed
mytable.drop(engine)

Unterstützt SQLAlchemy ALTER TABLE, CREATE VIEW, CREATE TRIGGER, Schema-Upgrade-Funktionalität?¶

Allgemeine ALTER-Unterstützung ist in SQLAlchemy nicht direkt vorhanden. Für spezielle DDL-Operationen auf Ad-hoc-Basis können die DDL und verwandte Konstrukte verwendet werden. Siehe Anpassen von DDL für eine Diskussion zu diesem Thema.

Eine umfassendere Option ist die Verwendung von Schema-Migrationswerkzeugen wie Alembic oder SQLAlchemy-Migrate; siehe Datenbankobjekte über Migrationen ändern für eine Diskussion hierzu.

Wie kann ich Table-Objekte nach ihrer Abhängigkeit sortieren?¶

Dies ist über die Funktion MetaData.sorted_tables verfügbar

metadata_obj = MetaData()
# ... add Table objects to metadata
ti = metadata_obj.sorted_tables
for t in ti:
    print(t)

Wie kann ich die CREATE TABLE/DROP TABLE-Ausgabe als Zeichenkette erhalten?¶

Modernes SQLAlchemy verfügt über Klauselkonstrukte, die DDL-Operationen darstellen. Diese können wie jeder andere SQL-Ausdruck in Zeichenketten gerendert werden

from sqlalchemy.schema import CreateTable

print(CreateTable(mytable))

Um die Zeichenkette spezifisch für eine bestimmte Engine zu erhalten

print(CreateTable(mytable).compile(engine))

Es gibt auch eine spezielle Form von Engine, die über create_mock_engine() verfügbar ist und es ermöglicht, eine gesamte Metadaten-Erstellungssequenz als Zeichenkette auszugeben, indem dieses Rezept verwendet wird

from sqlalchemy import create_mock_engine


def dump(sql, *multiparams, **params):
    print(sql.compile(dialect=engine.dialect))


engine = create_mock_engine("postgresql+psycopg2://", dump)
metadata_obj.create_all(engine, checkfirst=False)

Das Tool Alembic unterstützt auch einen "Offline"-SQL-Generierungsmodus, der Datenbankmigrationen als SQL-Skripte rendert.

Wie kann ich Table/Column unterklassifizieren, um bestimmte Verhaltensweisen/Konfigurationen bereitzustellen?¶

Table und Column sind keine guten Ziele für direkte Unterklassifizierung. Es gibt jedoch einfache Möglichkeiten, Verhaltensweisen während der Erstellung mithilfe von Erstellungsfunktionen und Verhaltensweisen im Zusammenhang mit den Verknüpfungen zwischen Schemaobjekten wie Constraint-Konventionen oder Namenskonventionen mithilfe von Anhang-Events zu erzielen. Ein Beispiel für viele dieser Techniken finden Sie unter Namenskonventionen.

Vorher: Connections / Engines Nächste: SQL-Ausdrücke
© Copyright 2007-2025, die SQLAlchemy-Autoren und Mitwirkenden.

Die Designs von flambé! dem Drachen und Der Alchemist wurden von Rotem Yaari erstellt und großzügig gespendet.

Erstellt mit Sphinx 7.2.6. Dokumentation zuletzt generiert: Di 11 Mär 2025 14:40:17 EDT
Python

Website-Inhalt Copyright © von SQLAlchemy-Autoren und Mitwirkenden. SQLAlchemy und seine Dokumentation sind unter der MIT-Lizenz lizenziert.

SQLAlchemy ist eine Marke von Michael Bayer. mike(&)zzzcomputing.com Alle Rechte vorbehalten.

Website-Generierung durch zeekofile, mit großem Dank an das Blogofile-Projekt.

Mastodon Mastodon