web-dev-qa-db-fra.com

Liste des tables de base de données avec SQLAlchemy

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?

34
drgxfs

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'])

docs: http://docs.sqlalchemy.org/en/rel_0_9/core/reflection.html?highlight=inspector#fine-grained-reflection-with-inspector

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

66
zzzeek

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)
2
PepperoniPizza

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. 

0
user2682863