Rufen Sie Metadaten wie Spaltennamen und Spaltentypen vorhandener Tabellen über SQLAlchemy ab.
Die bei der Überprüfung verwendete Version ist in ()
.
create table demo_tbl (
i_col integer,
f_col float,
c_col char(1),
d_col date,
PRIMARY KEY (i_col)
)
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)
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).
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
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'}