DDBC操作MSSQLSERVER数据库

DDBC即‌Direct Database Connectivity(直接数据库连接)‌,是微软官方推出的mssql-python驱动的核心连接机制,无需额外安装ODBC这类外部驱动管理器,就能直接操作SQL Server,适配当前的Python与SQL Server集成开发场景。

1

基础环境要求

  • Python版本需为 ‌3.10及以上
  • 支持的数据库范围:本地SQL Server、Azure SQL Database、Azure SQL托管实例、Microsoft Fabric中的SQL数据库
  • 完全符合Python Database API Specification 2.0规范,同时做了Python生态友好的优化

2基础代码

安装支持库

pip install mssql-python

基本代码

复制代码
"""建立数据库连接"""
        # 配置连接信息
        server = "localhost"  
        database = "WxpTemperatureDB"
        username = "XXXXXX"
        password = "XXXXXX"
                
        # 构建连接字符串
        # Encrypt=yes: 启用加密
        # TrustServerCertificate=no: 开发环境可设为 yes 或使用自签名证书处理
        conn_str = (
                    f"Server={server};"
                    f"Database={database};"
                    f"UID={username};"
                    f"PWD={password};"
                    "Encrypt=yes;"
                    "TrustServerCertificate=yes;" 
                    )      
        #数据库连接
        try:  
            self.WxpDataConnect =mssql_python.connect(conn_str)          
            if self.WxpDataConnect:
                self.log_message(f"数据库连接成功")
            else:
                self.log_message(f"数据库连接失败")
        except Exception as e:
            messagebox.showerror("数据库连接错误", str(e)) 

具体数据库操作代码

复制代码
 #查询数据        
        sql = f"SELECT TOP 1000 [RowID] FROM [WxpTemperature]  \
            WHERE DataTime BETWEEN '{beginTime}' AND '{stopTime}';"
       
        
        # 创建一个游标对象       
        #数据库连接  
        try:                
            if self.WxpDataConnect:               
                 # 查看现有表
                cursor=self.WxpDataConnect.cursor()
                cursor.execute(sql)
                dataset=cursor.fetchall()        
                cursor.close()            
                
                for i,row in enumerate(dataset,start=1):
                    tag = 'evenrow' if i % 2 == 0 else 'oddrow'
                    self.tree.insert("", tk.END, values=(i, f"{row[1]}",), tags=(tag,))
                self.log_message(f"数据获取成功,数据量(最多1000):"+str(len(dataset)))
            else:
                self.log_message(f"数据获取失败")
        except Exception as e:
            # messagebox.showerror("数据库连接错误", str(e))
            self.log_message(f"数据获取失败"+str(e))             

3数据库用户的建立

主要是操作权限问题

3.1 设置验证方式

3.2 建立新用户

3.3 设置操作权限