Pyhton连接SQL Server数据库解决方案

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 为了提高工作效率及便利性,拟自主开发一款一键自动化运维小工具;其中主要一项功能用于与SQL Server数据库进行交互,程序可以根据数据库中数据情况,调用对应函数逻辑,做出相应的操作,以达到自动化运维的效果;

为了提高工作效率及便利性,拟自主开发一款一键自动化运维小工具;其中主要一项功能用于与SQL Server数据库进行交互,程序可以根据数据库中数据情况,调用对应函数逻辑,做出相应的操作,以达到自动化运维的效果;
关于Python连接SQL Server的方法,调研了一些Python模块,最终选取了pyodbc模块:

pymysql模块
最开始计划选取pymysql模块,安装比较顺利,但连接始终失败,提示异常“pymysql.err.OperationError:[Errorno10054]”;经过排查,连接所需要的信息均正确,但经过确认后发现,pymysql模块仅适用于连接mysql数据库,而无法连接sqlserver数据库,之前也由于调研时意外看错,实际计划选用的Python拓展包实际应为“pymssql”。

pymssql模块
pymssql模块在安装时就问题频发,不论是在线直接安装,还是在Python官网下载安装文件离线安装均未成功;

最初安装过程中提示“_mssql.c(266) : fatal error C1083: Cannot open include file: 'sqlfront.h': No such file or directory”,经过排查,发现是由于缺少'sqlfront.h'等头文件造成,需要下载对应版本的“freeTDS”,以获得对应的头文件,但将“freeTDS”包中的头文件及dll文件放置在Python安装对应的目录下后,再次安装pymssql,依然提示较多异常:

经过排查,是由于Python的底层语言是C,而系统中缺少相关环境,研究较长时间无有效解决方案,遂放弃使用pymssql模块;之前选择的版本是pymssql_2.1.3_cp27,在前几天8月28日又最新发布了2.1.4版本,待校验是否问题依然存在。

pyodbc模块
pyodbc模块可以直接在线安装,安装过程很顺利:

使用import验证pyodbc安装成功:

pyodbc连接SQLServer
下面开始使用pyodbc尝试连接已经建立完成的模拟待访问的sqlserver数据库;pyodbc连接sqlserver有两种形式:
sqlconn = pyodbc.connect('DRIVER={SQL Server};SERVER=localhost;DATABASE=database;UID=name;PWD=pass')
或者
sqlconn = pyodbc.connect(DRIVER='{SQL Server}',SERVER='localhost',DATABASE='database',UID='name',PWD='pass')
两种形式可以根据个人习惯进行选择,我个人比较倾向于第二种,在编译器中会高亮关键字,从而便于维护,下面的代码中大家会看到;

上述可以看到对于connect()函数连接sqlserver时需要传入5个参数值,分别为DRIVER、SERVER、DATABASE、UID及PWD,参数值的准确很关键,因为任何一个出错也无法正常的连接到sqlserver,而尤其对sqlserver的配置不太熟悉更是比较分不清到底每个参数实际应赋予的值是什么?下面来说明一下:

DRIVER:一般为固定的{SQL Server}即可,当然换成对应的Native Client的版本信息也是可以连接成功的,例如{SQL Server Native Client 10.0};

SERVER:填写在SQL Server登录时的服务器名称即可,可以是SQL Server配置管理器中-SQL Server网络配置-实例的协议-TCP/IP中任意有效的可访问信息;

DATABASE:
这个就很好理解了,上述服务器中任意数据库的名称即可;

UID:数据库登录名,但使用的登录名一定要允许登录,且允许连接到数据库引擎:

PWD:登录密码;
使用准确的信息进行尝试连接,验证连接正常:

pyodbc模块的基本使用
pyodbc模块在使用connect()成功连接sqlserver数据库后,会返回一个connect对象,使用该对象我们可以对数据库进行一些列的操作,如果之前已经了解过Python其他连接数据库模块,例如cx_Oracle、pymysql等,pyodbc模块对数据库操作的方法与它们是基本一致的;

cursor()
如果需要对已连接的数据库进行数据操作,那么必须得先从connect对象中获取游标,然后再使用游标进行sql语句的操作;
游标的获取直接使用connect对象调用cursor()函数即可:

!usr/python/bin

-- coding:utf-8 --

import pyodbc

sqlconn = pyodbc.connect(DRIVER='{SQL Server}',

                     SERVER='127.0.0.1,1433',
                     DATABASE='OIW11111',
                     UID='sa',
                     PWD='123')
AI 代码解读

cursor = sqlconn.cursor()
关于游标的概念:可以将游标(Cursor)形象地看做成一个变动的光标。它实际上是一个指针,它在一段数据库存放数据查询结果集或数据操作结果集的内存中,这个指针可以指向结果集中的任何一条记录 。这样就可以得到它所指向的数据了,但初始时它指向首记录。

cursor.execute(sqlStatement)
获取游标完成后,我们可以使用游标的execute()方法来执行我们需要的sql语句,execute()内传入需要执行语句的字符串形式,例如:
cursor.execute("select * from OIW11111..ashare_ordwth")
或者
sqlStatement = "select * from OIW11111..ashare_ordwth"
cursor.execute(sqlStatement)

cursor.fetchone()/fetchall()/fetchmany([size])
使用execute()执行完sql语句后,尤其是select语句会返回一些结果行,我们可以使用fetch系列的方法去对执行结果进行检索获取;
fetchone():
仅获取一条结果行,将以元组的形式返回,若查询结果为空,则返回None;

fetchall():
获取全部结果行,将以列表的形式返回,每条结果行以元组形式作为列表元素,若查询结果为空,则返回空列表,即[ ];

fetchmany([size]):
获取指定size数量的结果行,将以列表的形式返回,每条结果行以元组形式作为列表元素,若查询结果为空,则返回空列表,即[ ];

connect.commit()

提交当前事务,当使用游标对已连接的数据库进行修改,例如insert操作时,需要使用connect对象执行commit(),与sql中的commit起到相同的作用;
但如果修改完成不执行commit(),则已进行的变更将不会更新到连接的数据库中。
AI 代码解读

cursor.close()

关闭游标,虽然当Python程序执行完成后,会释放资源,小程序中如果不去关闭也不会有什么影响,但保证每次手动释放资源,是良好的习惯;
AI 代码解读

connect.close()

断开连接,与cursor.close()一样,但保证每次手动释放资源,是良好的习惯;
AI 代码解读

其他使用
关于pyodbc模块的实际应用远远不止上述所提及的,还有很多方法,后续也需要继续研究学习,比如执行多条sql语句的方法cursor.executemany(),以及游标移动的方法;
网上所提及的其他操作数据的拓展模块会有scroll()方法用于移动游标定位到指定的位置,对于文件对象的操作也可以使用seek()方法移动光标定位,但对于pyodbc模块暂时还未发现可用的游标移动方法,所以现在能想到的代替移动游标的方法只能使用sql语句条件的过滤减少数据量,对于查询结果使用fetchall()全部获取后再进行遍历或者定位。

完成代码
需求:遍历SqlServer中指定数据库表,如果表中存在非当日数据,则进行清空,否则不进行任何操作,以完成对SqlServer中指定数据库的初始化操作;

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
打赏
0
0
0
0
2
分享
相关文章
数据库编程:在PHP环境下使用SQL Server的方法。
看看你吧,就像一个调皮的小丑鱼在一片广阔的数据库海洋中游弋,一路上吞下大小数据如同海中的珍珠。不管有多少难关,只要记住这个流程,剩下的就只是探索未知的乐趣,沉浸在这个充满挑战的数据库海洋中。
30 16
ASP.NET连接SQL数据库:详细步骤与最佳实践指南ali01n.xinmi1009fan.com
随着Web开发技术的不断进步,ASP.NET已成为一种非常流行的Web应用程序开发框架。在ASP.NET项目中,我们经常需要与数据库进行交互,特别是SQL数据库。本文将详细介绍如何在ASP.NET项目中连接SQL数据库,并提供最佳实践指南以确保开发过程的稳定性和效率。一、准备工作在开始之前,请确保您
431 3
数据库数据恢复—SQL Server报错“错误 823”的数据恢复案例
SQL Server数据库附加数据库过程中比较常见的报错是“错误 823”,附加数据库失败。 如果数据库有备份则只需还原备份即可。但是如果没有备份,备份时间太久,或者其他原因导致备份不可用,那么就需要通过专业手段对数据库进行数据恢复。
SqlServer数据恢复—SqlServer数据库所在分区损坏的数据恢复案例
一块硬盘上存放的SqlServer数据库,windows server操作系统+NTFS文件系统。由于误操作导致分区损坏,需要恢复硬盘里的SqlServer数据库数据。
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第16天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括配置系统源、安装 SQL Server 2019 软件包以及数据库初始化,确保 SQL Server 正常运行。
228 4
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
219 1
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
146 1
数据库数据恢复—SQLserver数据库ndf文件大小变为0KB的数据恢复案例
一个运行在存储上的SQLServer数据库,有1000多个文件,大小几十TB。数据库每10天生成一个NDF文件,每个NDF几百GB大小。数据库包含两个LDF文件。 存储损坏,数据库不可用。管理员试图恢复数据库,发现有数个ndf文件大小变为0KB。 虽然NDF文件大小变为0KB,但是NDF文件在磁盘上还可能存在。可以尝试通过扫描&拼接数据库碎片来恢复NDF文件,然后修复数据库。
SQL安装程序规则错误解决方案
在安装SQL Server时,遇到安装程序规则错误是一个比较常见的问题