使用Python查询不同服务器上的多个SQL数据库

时间:2016-05-16 19:22:22

标签: python sql-server database

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

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

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

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

我可以使用Python操作后台数据,类似于我如何处理excel(查找,统计函数等,甚至XML / webAPI?

Python可以同时处理与多个不同数据库服务器的连接吗?

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

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

如果我能提供其他相关细节,请与我们联系。

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

谢谢!

2 个答案:

答案 0 :(得分:0)

你可以做你所要求的所有事情。 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提供了一个令人难以置信的库,可以帮助您从一个主脚本执行多个任务。

答案 1 :(得分:0)

我没有使用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)