133 votes

SQLAlchemy - Obtenir une liste de tables

Je n'ai pas trouvé d'information à ce sujet dans la documentation, mais comment puis-je obtenir une liste des tables créées dans SQLAlchemy ?

J'ai utilisé la méthode des classes pour créer les tableaux.

10voto

jmunsch Points 709

Je cherchais quelque chose comme ça :

from sqlalchemy import create_engine
eng = create_engine('mysql+pymysql://root:password@localhost:3306', pool_recycle=3600)
q = eng.execute('SHOW TABLES')

available_tables = q.fetchall()

Il fait un execute et retourne toutes les tables.

mettre à jour :

Postgres :

eng = create_engine('postgresql+psycopg2://root:password@localhost/
q = eng.execute('SELECT * FROM pg_catalog.pg_tables')

4 votes

Il n'est pas multiplateforme. Il ne fonctionnera qu'avec mysql, il ne fonctionnera pas avec d'autres moteurs de base de données.

0 votes

@EdwardBetts vous avez raison, quel moteur db vous demandiez-vous ?

0 votes

Le PO a demandé postgres et non sql

7voto

Han Zhang Points 41

C'est aussi simple que ça :

engine.table_names()

Aussi, pour tester si une table existe :

engine.has_table(table_name)

6voto

Keith Points 13800

L'objet de métadonnées avec lequel vous avez créé les tables a cela dans un dictionnaire.

metadata.tables.keys()

6voto

user2189731 Points 97

Je suis en train de résoudre le même problème et j'ai trouvé ce post. Après quelques essais, je suggère d'utiliser la méthode ci-dessous pour lister toutes les tables : (mentionné par zerocog)

metadata = MetaData()
metadata.reflect(bind=engine)
for table in metadata.sorted_tables:
    print(table)

C'est utile pour la manipulation directe des tables et je pense que c'est recommandé.

Et utilisez le code ci-dessous pour obtenir les noms des tables :

for table_name in engine.table_names():
    print(table_name)

"metadata.tables" fournit un Dict pour le nom de la table et l'objet Table. qui serait également utile pour une recherche rapide.

3voto

zerocog Points 135

Refléter toutes les tables à la fois vous permet également de récupérer les noms de tables cachés. J'ai créé quelques tables temporaires et elles sont apparues avec

meta = MetaData()
meta.reflect(bind=myengine)
for table in reversed(meta.sorted_tables):
    print table

Référence http://docs.sqlalchemy.org/en/latest/core/reflection.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X