SQLAlchemy中的数据库列表

19 投票
3 回答
18460 浏览
提问于 2025-04-18 00:09

在SQLAlchemy中,有办法获取所有数据库的列表吗?我需要一个跨数据库的解决方案,所以简单的“SHOW DATABASES”不够用。

就像MetaData/Inspector的功能可以显示所有表和列一样。

3 个回答

-1

这是我为mysql想出的一个解决方案:

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

它会执行操作并返回所有的行数据。

4
engine.execute('SELECT datname FROM pg_database;').fetchall()

数据库里的每个实体都会保存在某个“系统”表里。比如,在Postgres这个数据库中,你可以通过pg_database这个表来获取所有的数据库。

26

看起来我自己找到了答案。

在Inspector类中有一个叫做 get_schema_names 的方法,这个方法的文档不是很详细,但它可以返回一个数据库的列表(我刚测试过,适用于MySQL和Postgres)。

用法:

import sqlalchemy as sa
engine = sa.create_engine('mysql+pymysql://user:pwd@localhost')
insp = sa.inspect(engine)
db_list = insp.get_schema_names()
print(db_list)

撰写回答