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.