python 实现将局域网中所有主机的SQL Server数据库定时汇总到一台主机上 给出具体代码
时间: 2024-03-13 09:42:39 浏览: 26
以下是使用Python的schedule库将局域网中所有主机的SQL Server数据库定时汇总到一台主机上的代码示例:
```python
import pyodbc
import schedule
import time
import socket
# 连接到目标数据库
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=your_server;DATABASE=your_database;UID=username;PWD=password')
cursor = cnxn.cursor()
# 定义汇总函数
def collect_database():
# 扫描局域网中的所有主机,找到所有运行SQL Server数据库的主机
for ip in range(1, 255):
hostname = socket.gethostname(ip)
if hostname:
try:
cnxn_remote = pyodbc.connect('DRIVER={SQL Server};SERVER=' + hostname + ';DATABASE=master;UID=username;PWD=password')
cursor_remote = cnxn_remote.cursor()
tables = cursor_remote.tables()
for table in tables:
query = 'SELECT * FROM [' + table.table_name + ']'
data = cursor_remote.execute(query).fetchall()
for row in data:
# 将每个表的查询结果存储到汇总数据库中的相应表中
cursor.execute('INSERT INTO [' + table.table_name + '] VALUES ' + str(row))
cnxn_remote.close()
except:
pass
# 提交更改
cursor.commit()
# 每隔一段时间执行一次汇总函数
schedule.every(10).minutes.do(collect_database)
while True:
schedule.run_pending()
time.sleep(1)
```
其中,`your_server`和`your_database`分别是目标数据库所在的服务器和数据库名称,`username`和`password`分别是连接目标数据库所需的用户名和密码。使用`socket.gethostname()`函数扫描局域网中的所有主机,如果主机名存在,则使用`pyodbc.connect()`函数连接到该主机上运行的SQL Server数据库,并查询所有表的数据。然后,将查询结果逐行插入到汇总数据库中的相应表中。每隔10分钟执行一次汇总函数,使用`schedule.every(10).minutes.do(collect_database)`语句实现。最后,使用`cursor.commit()`方法提交更改,不断循环执行汇总函数,直到程序被手动停止。需要注意的是,这个过程可能需要一些时间来处理大量的数据,因此需要考虑优化查询和存储数据的方式,以提高执行效率和减少资源消耗。