0,首先在电脑中安装pymssql库,该库可以到这里下载:http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql
---使用该库时,需要在Sql Server Configuration Manager里面将TCP/IP协议开启
1,下面是连接和查询Sql数据库类(底层访问类---通用,有了它就可以随意访问数据库了,主要包含一些访问数据库的函数):
import pymssql
class MSSQL:
def __init__(self,host,user,pwd,db): #类的构造函数,初始化数据库连接ip或者域名,以及用户名,密码,要连接的数据库名称
self.host=host
self.user=user
self.pwd=pwd
self.db=db
def __GetConnect(self): #得到数据库连接信息函数, 返回: conn.cursor()
if not self.db:
rasie(NameError,"没有设置数据库信息")
self.conn=pymssql.connect(host=self.host,user=self.user,password=self.pwd,database=self.db,charset='utf8')
cur=self.conn.cursor() #将数据库连接信息,赋值给cur。
if not cur:
raise(NameError,"连接数据库失败")
else:
return cur
#执行查询语句,返回的是一个包含tuple的list,list的元素是记录行,tuple的元素是每行记录的字段
def ExecQuery(self,sql): #执行Sql语句函数,返回结果
cur = self.__GetConnect() #获得数据库连接信息
cur.execute(sql) #执行Sql语句
resList = cur.fetchall() #获得所有的查询结果
#查询完毕后必须关闭连接
self.conn.close() #返回查询结果
return resList
def ExecNonQuery(self,sql):
cur = self.__GetConnect()
cur.execute(sql)
self.conn.commit()
self.conn.close()
2,下面在函数中,连接数据库,并执行一个简单的查询语句(查):
def main():
ms=MSSQL(host="117.79.156.45",user="cswutong",pwd="cjsys!@#",db="CsWutong") #实例化类对象,连接数据对象
reslist=ms.ExecQuery("select top 10 id,c_value from dbo.bx_categories AS bc") #调用函数执行查询语句
for(id,huiyuancontent) in reslist: #遍历返回结果
print huiyuancontent #转换为字符串,打印出来。
3,下面是一个超微复杂点的查询语句(查):
def main():
ms=MSSQL(host="117.79.156.40",user="wutongview",pwd="*",db="Wutong")
lst2=[] #声明列表,Python中没有数组这个概念
lst=[,,,,,,,]
for i in lst: #遍历列表
reslist=ms.ExecQuery("SELECT com_name FROM com WHERE cust_id='"+str(i)+"'") #Python可以用这种加号拼接,也可以用占位符和format进行字符串格式化拼接
if len(reslist)==0: #如果查询的结果集数组为空,直接添加数据库查询结果集,否则,添加结果集中的第一行第一列的值,即reslist[0][0]
lst2.append(reslist)
#print("第一个为空")
#break #break可以跳出循环
else:
lst2.append(reslist[0][0])
return lst2 #返回列表
4,下面是插入数据(增)操作:
def insert():
ms=MSSQL(host="117.79.156.45",user="cswutong",pwd="cjsys!@#",db="CsWutong")
back_val=ms.ExecNonQuery("INSERT dbo.bx_xyzBackContent ( backmsg, time ) VALUES ( N'nihaoceshi','2014-04-02 13:55:27')") #注意,这里back_val为None值。
return back_val
5,下面是删除(删)操作:
def delete():
ms=MSSQL(host="117.79.156.45",user="cswutong",pwd="cjsys!@#",db="CsWutong")
back_val=ms.ExecNonQuery("DELETE FROM dbo.bx_xyzBackContent WHERE id='6333'") #注意,这里back_val为None值。
return back_val
6,下面是更新(改)操作:
def update():
ms=MSSQL(host="117.79.156.45",user="cswutong",pwd="cjsys!@#",db="CsWutong")
back_val=ms.ExecNonQuery("UPDATE dbo.bx_xyzBackContent SET backmsg='nihaotest' WHERE id=6331") #注意,这里back_val为None值。
return back_val
7,执行存储过程:
cur.execute("exec 存储过程名 @参数1=XXX, @参数2='YYY'......")
*一个真实的案例:
def main():
ms=MSSQL(host="192.168.0.156",user="view",pwd="*",db="Wutong")
reslist=ms.ExecQuery("exec SearchBshi @fromProvince='',@fromCity='',@fromArea='',@companyAddress='',@intPageNo=1,@intPageSize=10")
return reslist #这里,返回的也是查询结果集,就像一张临时表,处理方法和上边一样。
---前提,你的账号要有执行存储过程的权限,否则会报下边错误:
OperationalError: (229, "The EXECUTE permission was denied on the object 'SearchBshi', database 'Wutong', schema 'dbo'.DB-Lib error message 229, severity 14: General SQL Server error: Check messages from the SQL Server ")
@注意事项:
1,使用pymssql进行中文操作时候可能会出现中文乱码,我解决的方案是:
- 文件头加上 #coding=utf8
- sql语句中有中文的时候进行encode
= "insert into WeiBo([UserId],[WeiBoContent],[PublishDate]) values(1,'测试','2012/2/1')".encode("utf8") - 连接的时候加入charset设置信息
=self.host,user=self.user,password=self.pwd,database=self.db,charset="utf8")
2,print str(huiyuancontent),不要加str,会报编码错误。用unicode(huiyuancontent)。
3,注意Sql语句,查询返回的结果值处理问题。reslist=ms.ExecQuery("select top 10 id,c_value from dbo.bx_categories AS bc")
这里reslist是一个数组对象[(u'做事',), (u'作为实现',), (u'佐照龙',)],[]代表查询的结果集数组,里边的圆括号表示的是一行一行的数据,圆括号内逗号隔开的是一列一列的数据。
---最主要,是我们取值的时候,要取对应的值。假如我取结果集中第一行第一列的值,那就是reslist[0][0]
到此这篇pymssql连接数据库 报错(py连接mysql数据库)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/sqlbc/70476.html