Chargement automatique de tables à partir d'une base de données
On peut utiliser SQLAlchemy pour charger automatiquement des tables d'une base de données grâce à un mécanisme appelé réflexion. La réflexion consiste à lire la base de données et à construire les métadonnées à partir de ces informations. C'est l'inverse de créer une Table manuellement et c'est très utile pour travailler avec des bases existantes.
Pour effectuer la réflexion, vous devez d'abord importer et initialiser un objet MetaData. Les objets MetaData contiennent des renseignements sur les tables stockées dans une base de données. Pendant la réflexion, l'objet MetaData sera rempli automatiquement avec l'information sur la table reflétée; il suffit donc de l'initialiser en appelant MetaData() avant de lancer la réflexion.
Vous devrez aussi importer l'objet Table du progiciel SQLAlchemy. Ensuite, vous utiliserez cet objet Table pour lire votre table depuis le moteur, charger automatiquement les colonnes et renseigner les métadonnées. Tout cela peut se faire avec un seul appel à Table() : utiliser l'objet Table de cette façon revient à passer des arguments à une fonction. Par exemple, pour charger automatiquement les colonnes avec le moteur, vous devez préciser les arguments nommés autoload=True et autoload_with=engine à Table().
Enfin, pour voir l'information sur l'objet que vous venez de créer, vous utiliserez la fonction repr(). Pour tout objet Python, repr() renvoie une représentation textuelle de cet objet. Pour les objets Table de SQLAlchemy, elle retourne l'information sur cette table contenue dans les métadonnées.
Dans cet exercice, votre tâche est de refléter la table "census" disponible sur votre engine dans une variable appelée census. Nous avons déjà prérempli le code pour créer le moteur que vous avez écrit à l'exercice précédent.
Cette activité fait partie du cours
Introduction aux bases de données en Python
Instructions de l’exercice
- Importez
TableetMetaDatadepuissqlalchemy. - Créez un objet
MetaData:metadata. - Reflétez la table
censusen utilisant l'objetTableavec les arguments suivants :- Le nom de la table sous forme de chaîne (
'census'). - Les métadonnées que vous venez d'initialiser.
autoload=True- Le moteur à utiliser pour le chargement automatique — dans ce cas,
engine.
- Le nom de la table sous forme de chaîne (
- Affichez les détails de
censusavec la fonctionrepr().
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# Import create_engine, MetaData, and Table
from sqlalchemy import create_engine, ___, ____
# Create engine: engine
engine = create_engine('sqlite:///census.sqlite')
# Create a metadata object: metadata
metadata = ___
# Reflect census table from the engine: census
census = Table(____, ____, autoload=____, autoload_with=____)
# Print census table metadata
print(____)