Ich konnte keine Informationen dazu in der Dokumentation finden, aber wie kann ich eine Liste der in SQLAlchemy erstellten Tabellen erhalten?
Ich habe die Klassenmethode verwendet, um die Tabellen zu erstellen.
quelle
Ich konnte keine Informationen dazu in der Dokumentation finden, aber wie kann ich eine Liste der in SQLAlchemy erstellten Tabellen erhalten?
Ich habe die Klassenmethode verwendet, um die Tabellen zu erstellen.
Alle Tabellen werden im tables
Attribut des SQLAlchemy MetaData-Objekts gesammelt . So erhalten Sie eine Liste der Namen dieser Tabellen:
>>> metadata.tables.keys()
['posts', 'comments', 'users']
Wenn Sie die deklarative Erweiterung verwenden, verwalten Sie die Metadaten wahrscheinlich nicht selbst. Glücklicherweise sind die Metadaten in der Basisklasse noch vorhanden.
>>> Base = sqlalchemy.ext.declarative.declarative_base()
>>> Base.metadata
MetaData(None)
Wenn Sie herausfinden möchten, welche Tabellen in Ihrer Datenbank vorhanden sind, auch unter denen, von denen Sie SQLAlchemy noch nicht einmal erzählt haben, können Sie die Tabellenreflexion verwenden. SQLAlchemy überprüft dann die Datenbank und aktualisiert die Metadaten mit allen fehlenden Tabellen.
>>> metadata.reflect(engine)
Wenn Sie für Postgres mehrere Schemas haben, müssen Sie alle Schemas in der Engine durchlaufen:
from sqlalchemy import inspect
inspector = inspect(engine)
schemas = inspector.get_schema_names()
for schema in schemas:
print("schema: %s" % schema)
for table_name in inspector.get_table_names(schema=schema):
for column in inspector.get_columns(table_name, schema=schema):
print("Column: %s" % column)
engine = sqlalchemy.create_engine('mysql://user:password@host/db_name')
eher als"mysql://user:password@host"
undengine.execute("use db_name")
.sqlalchemy.MetaData.reflect()
?reflect
Argument fürMetaData.__init__
ein boolesches Flag zugunsten der Verwendung veraltet istMetaData.reflect()
, genau wie ich es in meiner Antwort gezeigt habe.MetaData.reflect()
Methode auf diese Weise verwenden. Und kommentieren Sie es auch für jemanden, der möglicherweise das gleiche Problem hat, das durch die Motordeklaration verursacht wird.Es gibt eine Methode im
engine
Objekt, um die Liste der Tabellennamen abzurufen.engine.table_names()
quelle
Traceback (most recent call last): File "dedup_jobs.py", line 31, in <module> print(engine.table_names()) File "/Users/darshanchoudhary/.virtualenvs/services/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 2128, in table_names return self.dialect.get_table_names(conn, schema) value = value.replace(self.escape_quote, self.escape_to_quote) AttributeError: 'NoneType' object has no attribute 'replace'
(Stapel abgeschnitten)DB.engine.table_names()
oder wie auch immer der Name der Datenbankvariablen lautet.quelle
engine.table_names()
Verwenden Sie im Python-Interpreter db.engine.table_names ()
quelle
Ich habe so etwas gesucht:
Es führt eine Ausführung durch und gibt alle Tabellen zurück.
aktualisieren:
Postgres:
quelle
Das Metadatenobjekt, mit dem Sie die Tabellen erstellt haben, befindet sich in einem Wörterbuch.
quelle
Ich löse das gleiche Problem und habe diesen Beitrag gefunden. Nach einigen Versuchen würde ich vorschlagen, unten alle Tabellen aufzulisten: (von zerocog erwähnt)
Dies ist nützlich für die direkte Tabellenhandhabung und wird meiner Meinung nach empfohlen.
Verwenden Sie den folgenden Code, um Tabellennamen abzurufen:
"metadata.tables" bietet ein Dict für den Tabellennamen und das Tabellenobjekt. Das wäre auch nützlich für eine schnelle Abfrage.
quelle
reflect
,metadata.sorted_tables
wird nicht funktionierenDurch gleichzeitiges Reflektieren aller Tabellen können Sie auch versteckte Tabellennamen abrufen. Ich habe einige temporäre Tabellen erstellt und sie wurden mit angezeigt
Referenz http://docs.sqlalchemy.org/en/latest/core/reflection.html
quelle
So einfach ist das:
Um zu testen, ob eine Tabelle vorhanden ist:
quelle