Je souhaite implémenter une fonction qui donne des informations sur toutes les tables (et leurs noms de colonne) présentes dans une base de données (pas uniquement celles créées avec SQLAlchemy). En lisant la documentation, il me semble que cela se fait par réflexion, mais je n’ai pas réussi à faire fonctionner quelque chose. Des suggestions ou des exemples sur la façon de faire cela?
commencer par un moteur:
from sqlalchemy import create_engine
engine = create_engine("postgresql://u:p@Host/database")
chemin d'accès rapide à tous les noms de table/colonne, utilisez un inspecteur:
from sqlalchemy import inspect
inspector = inspect(engine)
for table_name in inspector.get_table_names():
for column in inspector.get_columns(table_name):
print("Column: %s" % column['name'])
sinon, utilisez MetaData/Tables:
from sqlalchemy import MetaData
m = MetaData()
m.reflect(engine)
for table in m.tables.values():
print(table.name)
for column in table.c:
print(column.name)
docs: http://docs.sqlalchemy.org/en/rel_0_9/core/reflection.html#reflecting-all-tables-at-once
Bonjour, j’ai créé un petit module qui permet de refléter facilement toutes les tables d’une base de données à laquelle vous vous connectez avec SQLAlchemy. Regardez-le: EZAlchemy
from EZAlchemy.ezalchemy import EZAlchemy
DB = EZAlchemy(
db_user='username',
db_password='pezzword',
db_hostname='127.0.0.1',
db_database='mydatabase',
d_n_d='mysql' # stands for dialect+driver
)
# this function loads all tables in the database to the class instance DB
DB.connect()
# List all associations to DB, you will see all the tables in that database
dir(DB)
Bien que réflexion/inspection soit utile, j'ai eu du mal à extraire les données de la base de données. J'ai trouvé sqlsoup beaucoup plus convivial. Vous créez le moteur à l'aide de sqlalchemy et transmettez-le à sqlsoup.SQlSoup. c'est à dire:
import sqlsoup
def create_engine():
from sqlalchemy import create_engine
return create_engine(f"mysql+mysqlconnector://{database_username}:{database_pw}@{database_Host}/{database_name}")
def test_sqlsoup():
engine = create_engine()
db = sqlsoup.SQLSoup(engine)
# Note: database must have a table called 'users' for this example
users = db.users.all()
print(users)
if __== "__main__":
test_sqlsoup()
Si vous connaissez sqlalchemy, alors vous êtes familier avec sqlsoup. J'ai utilisé cela pour extraire des données d'une base de données wordpress.