Obtenez des métadonnées telles que les noms de colonnes et les types de colonnes des tables existantes via SQLAlchemy.
La version utilisée dans la vérification est entre ().
create table demo_tbl (
i_col integer,
f_col float,
c_col char(1),
d_col date,
PRIMARY KEY (i_col)
)
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)
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).
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
date d'Oracle peut être stocké jusqu'à l'heure, il s'agit de DateTime en tant que classe de SQLAlchemy.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'}
get_primary_keys, mais elle est obsolète car elle sera supprimée.