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

问题描述 投票:0回答:4

尝试使用 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)
类似于列出数据库下的表名?或者有什么更简单的方法而不需要导入 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']
python sql-server database sqlalchemy pymssql
4个回答
5
投票

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

from sqlalchemy import create_engine
engine = create_engine('mssql+pymssql://sa:saPassword@localhost:52865/myDb')
with engine.connect() as conn:
    rows = conn.exec_driver_sql("select name FROM sys.databases;").scalars().all()
print(rows)
# ['master', 'tempdb', 'model', 'msdb', 'test']

2
投票

还可以通过使用以下驱动程序执行单个查询来从特定方案获取表:

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

1
投票

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

0
投票

这是另一种逐行获取的解决方案:

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()
© www.soinside.com 2019 - 2024. All rights reserved.