【问题标题】:Using Python to Query multiple SQL databases on different servers使用Python查询不同服务器上的多个SQL数据库
【发布时间】:2016-05-16 19:22:21
【问题描述】:

我最近一直在通过 SQL 进行大量的手动数据分析、报告和仪表板,我想知道 python 是否能够将其中的大部分自动化。我根本不熟悉 Python,所以我希望我的问题是有道理的。对于安全/性能问题,我们将数据库存储在多个服务器(超过 5 个)上,其中包含与查询相关的数据。不幸的是,这些服务器的设置使它们无法相互通信,因此我无法在同一查询中从两台服务器中提取数据。我相信这是由于使用 Windows 凭据/安全性造成的限制。

为了我的数据分析和报告需求,我需要能够从其中的两个或多个中获取相关数据,因此我目前执行此操作的方式是运行查询,获取结果,运行另一个查询结果,在excel中做一些公式工作,然后运行另一个查询等等,直到我得到我需要的东西。

不幸的是,这既费时又让我提取大量数据集(数百万行),然后我必须根据所述数据库中的标准不断缩小范围。

我知道 Python 有能力查询 SQL Server,但我想我会问专家:

我可以在后台使用 Python 处理数据,就像使用 excel 一样(查找、统计函数等,甚至可能是 XML/webAPI?

Python 能否同时处理与多个不同数据库服务器的连接?

Python 能否很好地处理 Windows 凭据?

如果 Python 不是这方面的工具,你能说出一个更好的工具吗?

如果我能提供更多相关细节,请告诉我。

理想情况下,我希望最终创建我们自己的独立数据库并创建自动化流程以从其他数据库中提取所有内容,但由于项目限制,目前这是不可能的。

谢谢!

【问题讨论】:

    标签: python sql-server database


    【解决方案1】:

    我没有使用 Windows 凭据。但我使用 Python 同时处理多个 MS-SQL 数据库。它工作得很好。您可以使用库pymssql 或更好的SQLAlchemy

    但我认为您应该首先从有关 Python 的基本教程开始。因为您要处理数百万行,所以了解 Python 中的listsettupledict 非常重要。为了获得良好的性能,您应该使用正确的类型。

    pymssql

    的基本示例
    import pymssql
    
    conn1 = pymssql.connect("Host1", "user1", "password1", "db1")
    conn2 = pymssql.connect("Host2", "user2", "password2", "db2")
    
    cursor1 = conn1.cursor()
    cursor2 = conn2.cursor()
    
    cursor1.execute('SELECT * FROM TABLE1 LIMIT 10')
    cursor2.execute('SELECT * FROM TABLE2 LIMIT 10')
    
    result1 = cursor1.fetchall()
    result2 = cursor2.fetchall()
    
    # print each row
    for row in result1:
       print(row)
    
    # print each row
    for row in result2:
       print(row)
    

    【讨论】:

      【解决方案2】:

      你可以做你所要求的一切。 Python 允许通过库创建多个连接对象,例如,假设您使用 MySQL python,您将创建两个不同的对象,如下所示:

      不是实际代码,只是示例

      conn1 = mysqlConnect(server1, user, pass)
      conn2 = mysqlConnect(server2, user, pass)
      

      像这样,conn1 连接到一个数据库,而 conn2 连接到另一个数据库,通常你会这样做:

      conn1.execute(query_to_server_1)
      conn2.execute(query_to_server_2)
      

      这有助于在同一脚本中维护两个不同的连接。如果您正在寻找多线程,python 提供了一个令人难以置信的库,可以帮助您从一个主脚本执行多个任务。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-24
        • 2014-01-03
        • 2017-11-18
        • 2020-05-23
        • 1970-01-01
        • 1970-01-01
        • 2015-05-15
        相关资源
        最近更新 更多