[PYTHON] Obtenir des métadonnées pour les tables existantes à l'aide de SQLAlchemy

Objectif

Obtenez des métadonnées telles que les noms de colonnes et les types de colonnes des tables existantes via SQLAlchemy.

environnement

Environnement d'exploitation

Bibliothèques requises

La version utilisée dans la vérification est entre ().

Table à utiliser

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

la mise en oeuvre

Préparation

Création d'instance de moteur

Créez une instance sqlalchemy.engine.Engine pour vous connecter au RDB. Remplacez host, port, pdb-name, ʻuser et pass` par les informations de connexion à utiliser.

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)

Vérifier la création de l'instance

Créez une instance sqlalchemy.engine.reflection.Inspector pour obtenir les métadonnées.

inspector = sqlalchemy.inspect(engine)

Vous pouvez accéder aux métadonnées de la table à l'aide de l'instance de contrôle.

La liste des colonnes et la façon d'obtenir la clé primaire sont présentées ci-dessous. Consultez la documentation de l'API pour d'autres informations (https://docs.sqlalchemy.org/en/13/core/reflection.html#sqlalchemy.engine.reflection.Inspector).

Liste des colonnes

Si vous passez le nom de la table à la méthode get_columns comme indiqué ci-dessous, une liste d'informations de colonne sera renvoyée.

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}]

La valeur stockée dans la clé type est une instance d'un type général défini dans SQLAlchemy basé sur sqlalchemy.types.TypeEngine, ou une instance d'une sous-classe implémentée individuellement pour chaque base de données. Consultez la documentation de l'API pour plus de détails (https://docs.sqlalchemy.org/en/13/core/type_basics.html).

# i_col(integer)dans le cas de
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)dans le cas de
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

Clé primaire

Si vous passez le nom de la table à la méthode get_pk_constraint comme indiqué ci-dessous, les informations relatives à la clé primaire seront renvoyées.

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

référence

SQLAlchemy 1.3 Documentation

Recommended Posts

Obtenir des métadonnées pour les tables existantes à l'aide de SQLAlchemy
Obtenir des informations sur les notes à l'aide du SDK Evernote pour Python 3
Générer des définitions de table SQL Alchemy à partir d'un serveur MySQL existant à l'aide de sqlacodegen