Pyhton连接SQLServer数据库解决⽅案
为了提⾼⼯作效率及便利性,拟⾃主开发⼀款⼀键⾃动化运维⼩⼯具;其中主要⼀项功能⽤于与SQL Server数据库进⾏交互,程序可以根据数据库中数据情况,调⽤对应函数逻辑,做出相应的操作,以达到⾃动化运维的效果;
关于Python连接SQL Server的⽅法,调研了⼀些Python拓展模块,最终选取了pyodbc模块:
pymysql模块
最开始计划选取pymysql模块,安装⽐较顺利,但连接始终失败,提⽰异常“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 = t('DRIVER={SQL Server};SERVER=localhost;DATABASE=database;UID=name;PWD=pass')
或者:
sqlconn = t(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()函数即可:
oracle游标的使用
# !usr/python/bin
# -*- coding:utf-8 -*-
import pyodbc
sqlconn = t(DRIVER='{SQL Server}',
SERVER='127.0.0.1,1433',
DATABASE='OIW11111',
UID='sa',
PWD='123')
cursor = sqlconn.cursor()
关于游标的概念:可以将游标(Cursor)形象地看做成⼀个变动的光标。它实际上是⼀个指针,它在⼀段数据库存放数据查询结果集或数据操作结果集的内存中,这个指针可以指向结果集中的任何⼀条记录 。这样就可以得到它所指向的数据了,但初始时它指向⾸记录。
获取游标完成后,我们可以使⽤游标的execute()⽅法来执⾏我们需要的sql语句,execute()内传⼊需要执⾏语句的字符串形式,例如:ute("select * from OIW11111..ashare_ordwth")
或者
sqlStatement = "select * from OIW11111..ashare_ordwth"
cursor.fetchone()/fetchall()/fetchmany([size])
使⽤execute()执⾏完sql语句后,尤其是select语句会返回⼀些结果⾏,我们可以使⽤fetch系列的⽅法去对执⾏结果进⾏检索获取;fetchone():
仅获取⼀条结果⾏,将以元组的形式返回,若查询结果为空,则返回None;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。