我一直在使用sqlalchemy来完成其余的实现,现在我想从数据库中获取一个表列表。我试过这些:
# first attempt
engine = create_engine(datasource.connection_string)
insp = reflection.Inspector.from_engine(engine)
tables = insp.get_table_names()
view = insp.get_view_names()
# second attempt
meta = MetaData()
meta.reflect(bind=engine, views=True)
虽然它们都完美无缺,但它们都有缺点。
使用sql语句不是一个选项,因为我需要它有点交叉数据库。
有没有办法快速加载包括架构在内的对象?过滤不太重要,因为我可以足够快地在对象列表上执行此操作。
答案 0 :(得分:1)
get_table_names()
和meta.reflect()
一次只能从一个模式加载表。如果未给出显式模式名称,则假定为“默认”模式,这是您连接时数据库连接自动选择的模式;这是在数据库端配置的,与用于连接的用户帐户一起配置。
如果要查看此架构的名称,请使用“default_schema_name”属性:
>>> from sqlalchemy import create_engine, inspect
>>> e = create_engine("postgresql://scott:tiger@localhost/test")
>>> insp = inspect(e)
>>> insp.default_schema_name
u'public'