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

List names of all available MS SQL databases on server using python

尝试使用 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) 类似于在数据库下列出 table 名称?或者没有导入 Pandas 的任何更简单的方法?

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

如果您真正想要做的就是避免导入 pandas 那么以下对我来说很好用:

from sqlalchemy import create_engine
engine = create_engine('mssql+pymssql://sa:saPassword@localhost:52865/myDb')
conn = engine.connect()
rows = conn.execute("select name FROM sys.databases;")
for row in rows:
    print(row["name"])

生产

master
tempdb
model
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()

我相信以下代码段将列出您选择连接到的任何服务器上的可用数据库的名称。这将 return 一个将显示在您的浏览器中的 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')

也可以通过以下驱动程序执行单个查询从特定方案获取表:DB-API interface to Microsoft SQL Server for Python.

pip install pymssql
import pymssql

# Connect to the database
conn = 
pymssql.connect(server='127.0.0.1',user='root',password='root',database='my_database')

# Create a Cursor object
cur = conn.cursor()

# Execute the query: To get the name of the tables from my_database
cur.execute("select table_name from information_schema.tables") # where table_schema = 'tableowner'
    for row in cur.fetchall():

# Read and print tables
for row in cur.fetchall():
    print(row[0])

输出:

my_table_name_1
my_table_name_2
my_table_name_3
...
my_table_name_x