Python与SQL Server数据库完美结合,数据处理得心应手

方案一:
直接套用脚本,需可以看懂一些脚本逻辑

这个类实现了同时连接多个 SQL Server 数据库,并提供了执行查询和非查询操作的能力

import pymssql

class SqlServerConnector:
    def __init__(self, servers):
        self.connections = {}  # 存储数据库连接的字典
        for server in servers:
            conn = pymssql.connect(
                server=server['host'],
                port=server['port'],
                user=server['username'],
                password=server['password'],
                database=server['database']
            )
            self.connections[server['name']] = conn

    def execute_query(self, connection_name, query, params=None):
        with self.connections[connection_name].cursor() as cursor:  # 获取游标(cursor)
            cursor.execute(query, params)  # 执行查询语句
            result = cursor.fetchall()  # 获取结果集
        return result
    
    def execute_non_query(self, connection_name, query, params=None):
        with self.connections[connection_name].cursor() as cursor:  # 获取游标(cursor)
            cursor.execute(query, params)  # 执行增删改语句
            self.connections[connection_name].commit()  # 提交事务
            return cursor.rowcount  # 返回受影响的行数
        
    def execute_query_all(self, servers, query, params=None):
        results = {}  # 存储所有查询结果的字典
        for server in servers:
            connection_name = server['name']
            results[connection_name] = self.execute_query(connection_name, query, params)
        return results
    
    def execute_non_query_all(self, servers, query, params=None):
        results = {}  # 存储所有操作结果的字典
        for server in servers:
            connection_name = server['name']
            try:
                res = self.execute_non_query(connection_name, query, params)
                results[connection_name] = res
            except Exception as e:
                print(f"Error occurred when running query on {connection_name}: {e}")
                self.connections[connection_name].rollback() # 出错时回滚
        return results

以下是代码中的解释

import pymssql:导入 pymssql 库,用于与 SQL Server 数据库进行连接和交互。

class SqlServerConnector::定义一个名为 SqlServerConnector 的类。

def __init__(self, servers)::类的初始化方法,接受一个包含多个数据库信息的列表作为参数。

self.connections = {}:初始化一个字典,用于存储数据库连接。

for server in servers::遍历数据库列表中的每个数据库信息。

conn = pymssql.connect(...):根据数据库信息创建数据库连接对象。server['host']:数据库服务器的主机地址。server['port']:数据库服务器的端口号。server['username']:连接数据库的用户名。server['password']:连接数据库的密码。server['database']:要连接的数据库名称。

self.connections[server['name']] = conn:将数据库连接对象添加到字典中,以数据库名称作为键。

def execute_query(self, connection_name, query, params=None)::执行查询语句的方法。connection_name:数据库名称。query:要执行的查询语句。params=None:可选的查询参数。
def __init__(self, servers)::类的初始化方法,接受一个包含多个数据库信息的列表作为参数。

self.connections = {}:初始化一个字典,用于存储数据库连接。

for server in servers::遍历数据库列表中的每个数据库信息。

conn = pymssql.connect(...):根据数据库信息创建数据库连接对象。server['host']:数据库服务器的主机地址。server['port']:数据库服务器的端口号。server['username']:连接数据库的用户名。server['password']:连接数据库的密码。server['database']:要连接的数据库名称。

self.connections[server['name']] = conn:将数据库连接对象添加到字典中,以数据库名称作为键。

def execute_query(self, connection_name, query, params=None)::执行查询语句的方法。connection_name:数据库名称。query:要执行的查询语句。params=None:可选的查询参数。

方案二:直接调用封装脚本(写用例,执行脚本即可)
脚本实现封装后,只需要在SqlServer.yaml文件中写用例即可,此后执行SqlServer.py脚本即实现数据库的增删改查操作

目录介绍:
在这里插入图片描述

SqlServer.yaml 编写多个数据库连接信息

Sqlserver_jzjy_uat:
  -
    serverid: 0
    host: 127.0.0.1
    user: sa
    password: pwd1
    db: run
    charset: utf-8

  -
    serverid: 1
    host: 127.0.0.2
    user: sa
    password: pwd2
    db: run
    charset: utf-8

  -
    serverid: 2
    host: 127.0.0.3
    user: sa
    password: pwd2
    db: run
    charset: utf-8

PublicConfig.py脚本: 配置读取信息,方便调用

import os
from Public_Utils.util_yaml import YamlReader

class YamlPath:
    def __init__(self):
        current = os.path.abspath(__file__)
        self.base_dir = os.path.dirname(os.path.dirname(current))
        self._config_path = self.base_dir + os.sep + "Public_Config\Public_yaml"

    def get_sqlserver_file(self):
        self._config_file = self._config_path + os.sep + "SqlServer.yaml"
        return self._config_file

class ConfigYaml:
    def __init__(self):   #初始yaml读取配置文件
        self.sqlserver_config = YamlReader(YamlPath().get_sqlserver_file()).yaml_data()

    def get_sqlserver_yaml(self):
        return self.sqlserver_config['Sqlserver_jzjy_uat']

    def get_serveridlist_yaml(self):
        return self.sqlserver_config['uat_serverlist']


if __name__ == '__main__':
    pass


SqlServer.py 执行脚本

import pymssql
from Public_Config.PublicConfig import ConfigYaml

class SQLServer:
    def __init__(self):
        # 连接数据库
        self.connections = {}
        for server in ConfigYaml().get_sqlserver_yaml():
                conn = pymssql.connect(host =server['host'],
                                       user=server['user'],
                                       password=server['password'],
                                       database=server['db'],
                                       charset='cp936', as_dict=True)
                self.connections[server['serverid']] = conn

    def execute_query(self, connection_name, query, params=None):
        with self.connections[connection_name].cursor() as cursor:     #获取游标(cursor)
            cursor.execute(query,params)   #执行查询语句
            result = cursor.fetchall()     #获取结果集合
        return result

    def execute_query_all(self, query, params=None):  #全部数据库执行查询(select)
        results = {}
        for serverid in ConfigYaml().get_sqlserver_yaml():
            connection_name = serverid['serverid']
            results[connection_name] = self.execute_query(connection_name,query,params)
        return results

    def execute_query_special(self, query, params=None):  #指定的几个数据库一起执行语句 (select)
        results = {}
        serveridlist = ConfigYaml().get_serveridlist_yaml()['serveridlist']
        for serverid in ConfigYaml().get_sqlserver_yaml():
            if str(serverid['serverid']) in serveridlist.split(','):
                connection_name = serverid['serverid']
                results[connection_name] = self.execute_query(connection_name, query, params)
        return results

    def execute_non_query(self,connection_name,query,params=None):
        with self.connections[connection_name].cursor() as cursor:
            cursor.execute(query,params)    #执行增删查等操作
            self.connections[connection_name].commit()   #提交事务
        return cursor.rowcount      #返回受影响的行数

    def execute_non_query_all(self, query, params=None):  #实现配置表中的所有增删改等操作insert,delete,update)
        results = {}   #储存所有查询结果的字典
        for serverid in ConfigYaml().get_sqlserver_yaml():
            connection_name = serverid['serverid']
            try:
                res = self.execute_non_query(connection_name,query,params)
                results[connection_name] = res
            except Exception as e:
                print(f"Error occurred when running query on {connection_name} :{e}")
                self.connections[connection_name].rollback()   #出错时回滚
        return results

    def execute_non_query_special(self, query, params=None):  #实现配置表中指定数据库的增删改等操作insert,delete,update)
        results = {}   #储存所有查询结果的字典
        for serverid in ConfigYaml().get_sqlserver_yaml():
            serveridlist = ConfigYaml().get_serveridlist_yaml()['serveridlist']
            if str(serverid['serverid']) in serveridlist.split(','):
                connection_name = serverid['serverid']
                try:
                    res = self.execute_non_query(connection_name,query,params)
                    results[connection_name] = res
                except Exception as e:
                    print(f"Error occurred when running query on {connection_name} :{e}")
                    self.connections[connection_name].rollback()   #出错时回滚
        return results

if __name__ == '__main__':
    pass

util_yaml.py

import os
import yaml

class YamlReader:
    #初始化,判断文件是否存在
    def __init__(self,yaml_file):
        if os.path.exists(yaml_file):
            self.yaml_file = yaml_file
        else:
            raise FileNotFoundError("yaml文件不存在")
        self._data = None
        self._data_all = None

    def yaml_data(self):  #yaml文件读取 --单个文档读取
        #第一次调用data,读取yaml文档,如果不是,直接返回之前保存的数据
        if not self._data:
            with open(self.yaml_file,'rb') as f:
                self._data = yaml.safe_load(f)
        return self._data

    def yaml_data_all(self):  #多个文档的读取
        if not self._data_all:
            with open(self.yaml_file,'rb') as f:
                self._data_all = yaml.safe_load_all(f)
        return self._data_all
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Python可以使用pyodbc模块连接SQL Server数据库。具体步骤如下: 1. 安装pyodbc模块 可以使用pip命令进行安装: ``` pip install pyodbc ``` 2. 导入pyodbc模块 ``` import pyodbc ``` 3. 连接SQL Server数据库 使用pyodbc.connect()方法连接数据库,需要提供数据库的连接信息,例如: ``` server = 'localhost' database = 'testdb' username = 'sa' password = 'password' cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password) ``` 4. 执行SQL语句 可以使用cursor对象执行SQL语句,例如: ``` cursor = cnxn.cursor() cursor.execute("SELECT * FROM table_name") ``` 5. 获取查询结果 可以使用fetchall()方法获取查询结果,例如: ``` rows = cursor.fetchall() for row in rows: print(row) ``` 以上就是使用Python连接SQL Server数据库的基本步骤。 ### 回答2: Python是一种非常流行的编程语言,拥有大量的库和框架,能够处理各种数据,包括SQL Server数据库。下面介绍如何使用Python来连接SQL Server。 第一步,安装PyODBC库。PyODBC是Python与ODBC(开放数据库连接)之间的接口。在安装PyODBC之前,需要确保已安装ODBC驱动程序。可以使用多种方法安装PyODBC,比如pip install pyodbc。 第二步,导入pyodbc库,并创建与SQL Server数据库的连接。具体代码如下: import pyodbc conn = pyodbc.connect("DRIVER={ODBC Driver 17 for SQL Server};" "SERVER=myserver.database.windows.net;" "DATABASE=mydb;" "UID=myusername;" "PWD=mypassword") 在这个例子中,使用ODBC Driver 17 for SQL Server驱动程序与SQL Server建立连接。将相应的服务器名、数据库名、用户名和密码替换为实际值。 第三步,执行SQL查询。可以使用游标将SQL查询发送到服务器,并获得结果。 cursor = conn.cursor() cursor.execute('SELECT * FROM mytable') data = cursor.fetchall() 以上代码将从表mytable中选择所有行,并将它们存储在一个变量data中。可以使用其他SQL语句来执行其他操作,如插入、更新或删除数据。 第四步,关闭连接。 cursor.close() conn.close() 以上是Python连接SQL Server的基本流程。可以使用其他库和框架来扩展这个过程,如使用pandas库来将查询结果转换为数据框。在连接SQL Server时,需要注意一些安全性问题,如使用强密码、限制访问权限等措施。 ### 回答3: Python可以通过两种方式连接SQL Server,一种是使用ODBC驱动程序,另一种是使用pyodbc包。接下来将分别介绍这两种方法的实现步骤。 1. 使用ODBC连接SQL Server (1)安装ODBC驱动程序 首先需要安装ODBC驱动程序,可选择SQL Server Native 10.0或SQL Server Native 11.0版本,这里以SQL Server Native 11.0版本为例。 (2)创建数据源 打开“ODBC数据源管理员”,在“用户DSN”或“系统DSN”中创建一个新数据源,选择SQL Server Native 11.0作为驱动程序,并配置连接字符串、用户名和密码等信息。 (3)编写Python程序 导入pyodbc包,使用connect()方法连接ODBC数据源,传入数据源名称和用户名密码等参数,然后可以使用cursor()方法执行SQL语句。 示例代码: ```python import pyodbc conn = pyodbc.connect('DSN=SQLServer;UID=sa;PWD=123456') cursor = conn.cursor() cursor.execute('SELECT * FROM [dbo].[table_name]') rows = cursor.fetchall() ``` 2. 使用pyodbc包连接SQL Server pyodbc是Python库,提供了与ODBC数据库的连接。可以使用pyodbc包连接SQL Server数据库。 (1)安装pyodbc包 在终端运行以下命令: ```python pip install pyodbc ``` (2)编写Python程序 导入pyodbc包,使用connect()方法连接SQL Server数据库,传入数据库名称、服务器地址、用户名密码等参数,然后可以使用cursor()方法执行SQL语句。 示例代码: ```python import pyodbc conn = pyodbc.connect('Driver={SQL Server};Server=servername;Database=dbname;UID=user;PWD=password') cursor = conn.cursor() cursor.execute('SELECT * FROM [dbo].[table_name]') rows = cursor.fetchall() ``` 以上是连接SQL Server的两种方法,通过使用ODBC驱动程序或pyodbc包,可以轻松连接SQL Server数据库,并操作数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

经历一个春

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值