1

我一直在使用 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)

虽然它们都工作得很好,但它们都有各自的缺点。

  1. 第一个没有给我架构,而只有对象名称
  2. 第二个给了我世界,但跑得很慢......
  3. 两者都没有过滤

使用 sql 语句不是一个选项,因为我需要它有点跨数据库。

有没有办法快速加载包括模式在内的对象?过滤不太重要,因为我可以在对象列表上足够快地做到这一点。

4

1 回答 1

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'
于 2013-10-01T23:31:55.973 回答