python连接sqlserver数据库 教你用Python如何连接SQLServer2000的实例详解
大家好,关于python连接sqlserver数据库很多朋友都还不太明白,今天小编就来为大家分享关于教你用Python如何连接SQLServer2000的实例详解的知识,希望对各位有所帮助!
教你用Python如何连接SQLServer2000的实例详解
这篇文章主要介绍了Python连接SQLServer2000的方法,结合实例形式分析了Python实现数据库连接过程中所遇到的常见问题与相关注意事项,需要的朋友可以参考下
本文实例讲述了Python连接SQLServer2000的方法。分享给大家供大家参考,具体如下:
pymssql.sourceforge.net/介绍PYTHON连接MSSQL的好地址的哦!
Python好的一个方法就是能够在网上找到很多现成的模块然后直接下载拿过来用就可以了。具体快速开发的一个原因也就是这个了。现在就是主要来研究一个pymssql这个模块的操作功能了!
可以安装之后直接查询帮助文档进行查看到这个模块的一些功能帮助文档。
1.一个解决乱码问题的方法:
s.decode('gbk','ignore')比如,若要将某个String对象s从gbk内码转换为UTF-8,可以如下操作
s.decode('gbk').encode('utf-8')可是,在实际开发中,我发现,这种办法经常会出现异常:
UnicodeDecodeError:'gbk' codec can't decode bytes in position 30664-30665: illegal multibyte sequence
这是因为遇到了非法字符——尤其是在某些用C/C++编写的程序中,全角空格往往有多种不同的实现方式,比如/xa3/xa0,或者/xa4/x57,这些字符,看起来都是全角空格,但它们并不是“合法”的全角空格(真正的全角空格是/xa1/xa1),因此在转码的过程中出现了异常。
幸运的是,tiny找到了完美的解决办法(我因此被批评看文档不仔细,汗啊??)
s.decode('gbk','ignore').encode('utf-8')因为decode的函数原型是decode([encoding], [errors='strict']),可以用第二个参数控制错误处理的策略,默认的参数就是strict,代表遇到非法字符时抛出异常;
如果设置为ignore,则会忽略非法字符;
如果设置为replace,则会用?取代非法字符;
如果设置为xmlcharrefreplace,则使用XML的字符引用。
这个方法帮助确实是相当大的哦。对于那种在数据库中存储了全角与半角的非法字符的问题可以这样来进行解决处理的哦!
字符编码问题永远是一个让人头疼的问题哈哈!
2.www.python.org/dev/peps/pep-0249/
上面提供了Python-DBAPI的常用操作功能。
总结出来相关的API操作方法:
3.总结出来Python连接数据库的一般程序过程是这样来写的:
第一步:导入相关的模块
其中MYSQL:
import MySQLdb其中MSSQL:
import pymssql第二步:打开连接
其中MYSQL:
conn= MySQLdb.connect(self.dbhost,self.dbuser,self.dbpasswd,self.database)其中MSSQL:
conn= pymssql.connect(host=self.dbhost,user=self.dbuser,password=self.dbpasswd,database=self.database)[通过本身的函数原型来定义出来这个方法的]
第三步:连接完了之后就要开始创建一个cursor了。通过这个对象来对数据库发送一个请求操作。
代码:
curs= conn.cursor()相当于JAVA中的Statement对象一样的。通过语句来进行提交SQL命令的
第四步:开始发送SQL命令到数据库服务器了,可以这样来做
curs.execute(SQL)例如:
curs.execute("select* from test")其中的SQL命令可以是任意的SQL语句可以是执行INSERT操作或DELETE操作也可以是SELECT操作的
要注意到执行完了之后要进行commit()提交一次的。
例如:
cursor.execute("insert into test(id) values(1)")如果是执行了SELECT操作的话就要进行第五步操作了:
第五步:
curs.execute("select* from test")
rows= curs.fetchall()其中的fetchall()只是我们的cursor对象的一个方法而已的。
现在就可以提取出来相关信息了
for i in range(len(rows)):
print"Row",i,"name",rows[i][0],"value",rows[i][1]看我写的代码:
def test(self):
conn= self.connect()
sql="select* from bbs where id<20"
curs= conn.cursor()#得到一个游标对象
curs.execute(sql)#执行一个SQL语句
rows=curs.fetchall()#得到全部的查询结果集
for i in range(len(rows)):#
print"Row",i,"name",rows[i][3],"value",rows[i][4]
conn.close()我明白了:通过这样的方法的话得到的一行记录其实是一个元组的数据结构的。
要取其中的一个可以用一个类似两维数组的方法进行查询出来的。
rows[1][0]:表示第一条记录中的第一个位置的值的。
然后再来看看将其从数据库中提取出来之后进行编码处理与解码处理
for i in range(len(rows)):
print rows[i][4].decode('gb2312','ignore').encode('gb2312')
linux 下用python连接windows下sqlserver报错
基本上每个linux都安装有python,几乎每个unix也安装有python,包括苹果的OS。android。
windows下通常安装包都比较健壮。应该用得也很多。如果你安装出现问题往往是因为这个模块没有提供windows下的安装包。你可以查一下unoffice python module(好象是这个名子),里面有些包是别人编译好的,可以直接用。
主要问题还是windows使用的编译器是visual studio。而linux, unix很多都是兼容gcc的。象windows这样没有unix血统的操作系统,现在已经很少了,大规模使用仅仅微软一家支持。其它的厂商大多都有unix的传承与习惯。所以windows与unix之间的问题就显得比较的突出。
linux下命令行比较方便。不过图形界面并不是很强大。windows的图形界面通常好。另外windows下的游戏也特别好。如果你开发游戏通常只能在windows下做了。手机除外。
linux下的python通常比较的强大,因为它的包,它的工作方式通常会比较的流畅。象管道,事件,共享内存等等都比较容易使用。
python3连接MSSQL数据库 中文乱码怎么解决
以前用php连mssqy时也经常出现中文乱码(中文变问号)的问题,那时就明白是编码没设置好导航,现在的Python连mssql数据库也同样出现这问题,问题一样,解决的办法当然也会相似,现在我们来看看解决方法。
python一直对中文支持的不好,最近老遇到编码问题,而且几乎没有通用的方案来解决这个问题,但是对常见的方法都试过之后,发现还是可以解决的,下面总结了常用的支持中文的编码问题(这些方法中可能其中一个就能解决问题,也可能是多个组合)。
(1)、首先,要保证文件的开头要加上编码设置来说明文件的编码
代码如下
复制代码
#encoding=utf-8
(2)、然后,在连接数据的连接参数里加上字符集说明查询出的结果的编码,这个不加的后果可能是查询出的汉字字符都是问号
代码如下
复制代码
conn=pymssql.connect(server='.',user='', password='',database='MyTest',charset='utf8')
(3)、设置python系统的默认编码(对于文件来说,这招几乎屡试不爽,呵呵~~)
代码如下
复制代码
import sys
reload(sys)
sys.setdefaultencoding('utf8')
注意:上述编码是“utf8”,而不是“utf-8”,我也没弄明白,大部分情况下,这个无所谓的,但是这里我试了必须要是“utf8”
一个简单的完整的python连接mssqlserver的例子如下(得安装pymssql包):
代码如下
复制代码
#encoding:utf8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import pymssql
try:
conn=pymssql.connect(server='.',user='', password='',database='MyTest',charset='utf8')
sql="select* from UserInfo"
cur=conn.cursor()
cur.execute(sql)
data=cur.fetchall()
conn.close()
print data
except Exception,e:
print e
运行结果如下:
代码如下
复制代码
[(u'20093501', u'xb9xf9xbexb8', u'u7537', 35, u'xb4xf3xcfxc0'),
(u'20093502', u'xbbxc6xc8xd8', u'u5973', 34, u'xc3xc0xc5xae'),
(u'20093503', u'xc1xeexbaxfcxb3xe5', u'u7537', 25, u'2Bxc7xe0xc4xea'),
(u'20093504', u'xc8xcexd3xafxd3xaf', u'u5973', 24, u'xc6xafxc1xc1')]
[Finished in 0.2s]
虽然摆脱了问号和乱码的困扰,但这仍不是我们想要的结果,但这个确实是正确的,因为结果是utf8编码。这个现象确实诡异,请教了许多高手,得知,最好的结果就是逐个字段查询,才能显示中文,整个查询的话,会以utf8的格式显示出来。
上述代码中第14行data是整个查询的结果,如果指定某个具体的字段,如print data[0][2](表示取查询结果的第一行第三列的字段的值),则会输出中文。
其实不仅仅是mssqlserver数据库,mysql(需下载MySQLdb包)、sqllite(python自带的文件数据库)、mongodb(需下载PyMongo包)等或者是普通文本文件也是类似的解决方案。
好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!