2014-01-23 34 views
27

我想实现一个函数,该函数提供有关数据库中存在的所有表(及其列名)的信息(不仅包括使用SQLAlchemy创建的那些表)。在阅读文档时,在我看来,这是通过反射完成的,但我没有设法找到一些工作。有关如何做到这一点的任何建议或例子?使用SQLAlchemy列出数据库表

回答

55

开始与发动机:

from sqlalchemy import create_engine 
engine = create_engine("postgresql://u:[email protected]/database") 

所有表格/列名称的快速路径,请使用检查员:

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

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

可替代地,使用元数据/桌子:

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) 

文档:http://docs.sqlalchemy.org/en/rel_0_9/core/reflection.html#reflecting-all-tables-at-once

+2

是否有任何好处(或下侧),以使用'inspect' VS'reflect'? – dthor

2

嘿,我创建了一个小模块,可以帮助轻松地反映在您连接到与SQLAlchemy的数据库中所有表,给它一看: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) 
相关问题