使用python列出服务器上所有可用MS SQL数据库的名称

使用python列出服务器上所有可用MS SQL数据库的名称,python,sql-server,database,sqlalchemy,pymssql,Python,Sql Server,Database,Sqlalchemy,Pymssql,尝试使用Python列出远程MS SQL server上数据库的名称,就像MS SQL server Management Studio中的对象资源管理器一样 当前解决方案:所需查询是SELECT name FROM sys.databases;。所以当前的解决方案是使用SQLAlchemy和Pandas,其工作原理如下 import pandas from sqlalchemy import create_engine #database='master' engine = creat

尝试使用Python列出远程MS SQL server上数据库的名称,就像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的inspectengine类似于在数据库下列出表名?还是不进口熊猫的简单方法

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']

如果您真正想做的就是避免进口熊猫,那么以下几点对我来说很好:

从sqlalchemy导入创建引擎 引擎=创建引擎的mssql+pymssql://sa:saPassword@本地主机:52865/myDb' conn=发动机连接 rows=conn.executeselect name FROM sys.databases; 对于行中的行: printrow[名称] 生产

主人 tempdb 模型 msdb myDb
下面是另一个逐行获取的解决方案:

import pymssql
connect = pymssql.connect(server, user, password, database)
cursor = connect.cursor(as_dict=True)
row = cursor.fetchone()
while row:
    for r in row.items():
        print r[0], r[1]
    row = cursor.fetchone()

我相信下面的代码片段将列出您选择连接到的任何服务器上可用数据库的名称。这将返回一个JSON对象,该对象将显示在浏览器中。这个问题有点老了,但我希望这能帮助那些好奇的路过的人

from flask import Flask, request
from flask_restful import Resource, Api
from sqlalchemy import create_engine, inspect
from flask_jsonpify import jsonify

engine = create_engine('mssql+pymssql://user:password@server:port/master')

class AllTables(Resource):
    def get(self):
        conn = engine.connect()
        inspector = inspect(conn)
        tableList = [item for item in inspector.get_table_names()]
        result = {'data': tableList}
        return jsonify(result)

api.add_resource(AllTables, '/alltables')

app.run(port='8080')

还可以通过以下驱动程序执行单个查询,从特定方案获取表:Microsoft SQL Server for Python的DB-API接口

pip安装pymssql 导入pymssql 连接到数据库 连接= pymssql.connectserver='127.0.0.1',user='root',password='root',database='my_database' 创建一个游标对象 cur=conn.cursor 执行查询:从my_数据库获取表的名称 cur.executes从信息\u schema.tables中选择表\u名称,其中表\u schema='tableowner' 对于cur.fetchall中的行: 阅读和打印表格 对于cur.fetchall中的行: printrow[0] 输出:

我的表格名称1 我的表格名称2 我的表格名称3 ... 我的表格名称
它们应该存在于inspector.get_table_name中;你试过printinspector了吗?有表名吗?谢谢!已经试过了。这会返回数据库名下的表名,但不会返回服务器中的数据库名。噢!很明显,在这个假期的一周里,我的大脑被关闭了,完全误解了这个问题。我猜在SQLServer中get_schema_名称不起作用,因为您只会得到一个DBO列表?值得一试;我手头没有SQL Server装备,或者本周下班后我会做一些测试。get_schema_names会为两台不同的服务器返回相同的结果。因此,假设它显示了服务器的默认构建块,而不是我想要的内部DB名称。用更多信息编辑了这个问题我想你的意思是在代码块中获取模式名称而不是表名称?谢谢!引擎,连接,执行。。。即使在create_引擎中没有提供端口和数据库名称,也可以工作!