python3.5链接SQL2017,读取数据库中的数据
来源:互联网 发布:移动办公软件排名 编辑:程序博客网 时间:2024/06/11 23:04
之前写了一个小程序,使用的数据是从数据库中下载出来的,但是现在想要让它直接链接上数据库中,可以直接从数据库中读取数据,所以研究了一下python和sql之间的链接。具体如下:
使用的库为pyodbc
安装过程自不必多说,和其他库的安装一样
安装完成后测试过程,在网上找到了好多资料
>>> import pyodbc>>>cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=192.168.1.100\\sql;DATABASE=testDB;UID=sa;PWD=myPassword')>>>cursor = cnxn.cursor()>>>cursor.execute("select * from Tb")
下面一个一个说一下什么意思及自己要使用时应注意什么
第一句import pyodbc
导入pyodbc库
第二句 cnxn=pyodbc.connect('DRIVER={SQL Server};SERVER=192.168.1.100\\sql;DATABASE=testDB;UID=sa;PWD=myPassword')
我在这句吃了很多亏,导致了许多莫名其妙的错误,下面我们就详细剖析下这条语句,首先pyodbc.connect()
是链接函数,它传入一个string类型参数,这个参数会指定链接数据库的类型DRIVER
,数据库的名称DATABASE
,数据库所属服务器SERVER
,用户名UID
,密码PWD
,这些东西对于那些对数据库了解的比较好的童鞋来说应该不成问题,但对我这个半吊子来说这个就是一个大问题,下面就一个个地去找一下这些东西在哪,首先我先说下我的数据库是SQL2017,我使用的sql manage是Microsoft SQL Server Management Studio 17,在安装它时会自动安装一个Native Client,大家可以去控制面板->程序->程序与功能 中搜索Native Client,确认下自己的版本,然后对应下表,将对应的值输入链接数据库的类型DRIVER
后边花括号里;
- {SQL Server} ————————- released with SQL Server 2000
- {SQL Native Client} —————– released with SQL Server 2005 (also known as
version 9.0) - {SQL Server Native Client 10.0} - released with SQL Server 2008
{SQL Server Native Client 11.0} - released with SQL Server 2012
第二个参数数据库所属服务器
SERVER
的值我查阅的资料大多都是localhost,但是对于我的数据库却老是链接不上,所以我只好打开Microsoft SQL Server Management Studio 17,连接上数据库,右键属性
红圈中的值才是服务器的值,也就是SERVER
的值
第三个参数数据库的名称DATABASE
自不必多说,下图中红圈的值就是数据库的名称
在确定第四个参数和第五个参数的值之前,先看下数据库是否可以启用服务器代理账户,还是第一个参数一样的窗口右键->参数->安全性,要确保启用服务器代理账户项是可以启动的,如下图
然后找到对象资源管理器中的数据库服务器(第一个参数也在这)一项中的安全性->登录名
右键sa->属性->安全性,输入密码,确定。这个用户sa和密码就是第四和第五个参数。
这些就是第二条语句中的参数。
第三条语句是建立cursor,没什么可说的。
第四条语句就是对数据库中数据进行操作了,其中的sql语言要写在execute()函数中,并用双引号括起来
但是这条语句输出的却是
>>> cursor.execute("select name from Database.data")<pyodbc.Cursor object at 0x000001C421FAFAF8>
要想将它显示为正常的形式还需要调用其它函数fetchone()或者fetchall()。
>>> cursor.fetchall()[('1haha', ), ('2dada', ), ('3chuachua', ), ('4xixi', ), ('5hehe', ), ('6qieqie', ), ('7lele', ), ('8lala', )]
成功!
如果是对数据库中数据进行增删修改等其它操作时,还要记得用函数commit()对操作提交一下。
>>> cursor.execute("delect from Database.data where name = '4xixi' ")>>> cnxn.commit()