SQLAlchemy中的数据库列表
在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)