【发布时间】:2016-04-02 21:02:42
【问题描述】:
尝试使用 Python 列出远程 MS SQL 服务器上的数据库名称(就像 MS SQL Server Management Studio 中的对象资源管理器)。
当前解决方案:所需查询为SELECT name FROM sys.databases;。所以目前的解决方案是使用 SQLAlchemy 和 Pandas,如下所示。
import pandas
from sqlalchemy import create_engine
#database='master'
engine = create_engine('mssql+pymssql://user:password@server:port/master')
query = "select name FROM sys.databases;"
data = pandas.read_sql(query, engine)
输出:
name
0 master
1 tempdb
2 model
3 msdb
问题:如何使用
SQLAlchemy 的inspect(engine) 类似于在数据库下列出表名?或者没有导入熊猫的任何更简单的方法?
from sqlalchemy import inspect
#trial 1: with no database name
engine = create_engine('mssql+pymssql://user:password@server:port')
#this engine not have DB name
inspector = inspect(engine)
inspector.get_table_names() #returns []
inspector.get_schema_names() #returns [u'dbo', u'guest',...,u'INFORMATION_SCHEMA']
#trial 2: with database name 'master', same result
engine = create_engine('mssql+pymssql://user:password@server:port/master')
inspector = inspect(engine)
inspector.get_table_names() #returns []
inspector.get_schema_names() #returns [u'dbo', u'guest',...,u'INFORMATION_SCHEMA']
【问题讨论】:
-
它们应该存在于
inspector.get_table_names();你试过print(inspector.get_table_names())吗? -
谢谢!已经试过了。这确实会返回数据库名称下的表名,但不会返回服务器中的数据库名称。
-
天啊!在这个假期里,我的大脑显然被关闭了,完全误读了这个问题。我猜在 SQL Server
get_schema_names()中是行不通的,因为你只会得到dbos 的列表?值得一试;我手边没有 SQL Server 装备,或者我会做一些测试(本周下班)。 -
get_schema_names() 为两个不同的服务器返回相同的结果。所以猜测它显示了服务器的默认构建块,而不是我想要的内部数据库名称。用更多信息编辑了问题
-
我认为您的代码块中的意思是
get_schema_names而不是get_table_names?
标签: python sql-server database sqlalchemy pymssql