Python,sqlalchemy以及使用模式获取表的快速方法

时间:2013-09-20 17:25:14

标签: python reflection sqlalchemy

我一直在使用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. 两者都没有过滤
  4. 使用sql语句不是一个选项,因为我需要它有点交叉数据库。

    有没有办法快速加载包括架构在内的对象?过滤不太重要,因为我可以足够快地在对象列表上执行此操作。

1 个答案:

答案 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'