[PYTHON] Abrufen von Metadaten für vorhandene Tabellen mithilfe von SQLAlchemy

Zweck

Rufen Sie Metadaten wie Spaltennamen und Spaltentypen vorhandener Tabellen über SQLAlchemy ab.

Umgebung

Betriebsumgebung

Erforderliche Bibliotheken

Die bei der Überprüfung verwendete Version ist in ().

Tabelle zu verwenden

create table demo_tbl (
    i_col integer,
    f_col float,
    c_col char(1),
    d_col date,
    PRIMARY KEY (i_col)
)

Implementierung

Vorbereitung

Erstellung von Engine-Instanzen

Erstellen Sie eine "sqlalchemy.engine.Engine" -Instanz, um eine Verbindung zur RDB herzustellen. Ersetzen Sie "host", "port", "pdb-name", "user" und "pass" durch die zu verwendenden Verbindungsinformationen.

import sqlalchemy
import cx_Oracle

dsnStr = cx_Oracle.makedsn('host','port','pdb-name')
connect_str = 'oracle://user:pass@' + dsnStr.replace('SID', 'SERVICE_NAME')
engine = sqlalchemy.create_engine(connect_str, max_identifier_length=128)

Überprüfen Sie die Instanzerstellung

Erstellen Sie eine Instanz "sqlalchemy.engine.reflection.Inspector", um die Metadaten abzurufen.

inspector = sqlalchemy.inspect(engine)

Sie können mit der Prüfinstanz auf die Metadaten der Tabelle zugreifen.

Die Spaltenliste und wie Sie den Primärschlüssel erhalten, werden unten vorgestellt. Weitere Informationen finden Sie in der API-Dokumentation (https://docs.sqlalchemy.org/en/13/core/reflection.html#sqlalchemy.engine.reflection.Inspector).

Spaltenliste

Wenn Sie den Tabellennamen wie unten gezeigt an die Methode "get_columns" übergeben, wird eine Liste mit Spalteninformationen zurückgegeben.

columns = inspector.get_columns("demo_tbl")
[{'name': 'i_col',
  'type': INTEGER(),
  'nullable': False,
  'default': None,
  'autoincrement': 'auto',
  'comment': None},
 {'name': 'f_col',
  'type': FLOAT(),
  'nullable': True,
  'default': None,
  'autoincrement': 'auto',
  'comment': None},
 {'name': 'c_col',
  'type': CHAR(length=1),
  'nullable': True,
  'default': None,
  'autoincrement': 'auto',
  'comment': None},
 {'name': 'd_col',
  'type': DATE(),
  'nullable': True,
  'default': None,
  'autoincrement': 'auto',
  'comment': None}]

Der im Schlüssel "type" gespeicherte Wert ist eine Instanz eines allgemeinen Typs, der in SQLAlchemy basierend auf "sqlalchemy.types.TypeEngine" definiert ist, oder eine Instanz einer für jede DB einzeln implementierten Unterklasse. Weitere Informationen finden Sie in der API-Dokumentation (https://docs.sqlalchemy.org/en/13/core/type_basics.html).

# i_col(integer)Im Falle von
type_of_col0 = columns[0]["type"]
type(type_of_col0) # -> <class 'sqlalchemy.sql.sqltypes.INTEGER'>
isinstance(type_of_col0, sqlalchemy.types.TypeEngine) # -> True
isinstance(type_of_col0, sqlalchemy.types.Integer) # -> True
isinstance(type_of_col0, sqlalchemy.types.Float) # -> False

# d_col(date)Im Falle von
type_of_col3 = columns[3]["type"]
type(type_of_col3) # -> <class 'sqlalchemy.dialects.oracle.base.DATE'>
isinstance(type_of_col3, sqlalchemy.types.TypeEngine) # -> True
isinstance(type_of_col3, sqlalchemy.types.DateTime) # -> True
isinstance(type_of_col3, sqlalchemy.types.Date) # -> False

Primärschlüssel

Wenn Sie den Tabellennamen wie unten gezeigt an die Methode "get_pk_constraint" übergeben, werden die Informationen zum Primärschlüssel zurückgegeben.

{'constrained_columns': ['i_col'], 'name': 'sys_c007315'}

Referenz

SQLAlchemy 1.3 Documentation

Recommended Posts

Abrufen von Metadaten für vorhandene Tabellen mithilfe von SQLAlchemy
Mit dem Evernote SDK für Python 3 erhalten Sie Informationen zu Notizen
Generieren Sie mithilfe von sqlacodegen SQL Alchemy-Tabellendefinitionen von einem vorhandenen MySQL-Server