本文實(shí)例講述了Python連接SQLServer2000的方法。分享給大家供大家參考,具體如下:
http://pymssql.sourceforge.net/ 介紹PYTHON 連接MSSQL的好地址的哦!
Python好的一個(gè)方法就是能夠在網(wǎng)上找到很多現(xiàn)成的模塊然后直接下載拿過(guò)來(lái)用就可以了。具體快速開(kāi)發(fā)的一個(gè)原因也就是這個(gè)了。現(xiàn)在就是主要來(lái)研究一個(gè)pymssql這個(gè)模塊的操作功能了!
可以安裝之后直接查詢幫助文檔進(jìn)行查看到這個(gè)模塊的一些功能幫助文檔。
1.一個(gè)解決亂碼問(wèn)題的方法:
1
|
s.decode( 'gbk' , 'ignore' ) |
比如,若要將某個(gè)String對(duì)象s從gbk內(nèi)碼轉(zhuǎn)換為UTF-8,可以如下操作
1
|
s.decode( 'gbk' ).encode( 'utf-8' ) |
可是,在實(shí)際開(kāi)發(fā)中,我發(fā)現(xiàn),這種辦法經(jīng)常會(huì)出現(xiàn)異常:
UnicodeDecodeError: 'gbk' codec can't decode bytes in position 30664-30665: illegal multibyte sequence
這是因?yàn)橛龅搅朔欠ㄗ址?mdash;—尤其是在某些用C/C++編寫(xiě)的程序中,全角空格往往有多種不同的實(shí)現(xiàn)方式,比如/xa3/xa0,或者/xa4/x57,這 些字符,看起來(lái)都是全角空格,但它們并不是“合法”的全角空格(真正的全角空格是/xa1/xa1),因此在轉(zhuǎn)碼的過(guò)程中出現(xiàn)了異常。
幸運(yùn)的是,tiny找到了完美的解決辦法(我因此被批評(píng)看文檔不仔細(xì),汗啊……)
1
|
s.decode( 'gbk' , 'ignore' ).encode( 'utf-8' ) |
因?yàn)閐ecode的函數(shù)原型是decode([encoding], [errors='strict']),可以用第二個(gè)參數(shù)控制錯(cuò)誤處理的策略,默認(rèn)的參數(shù)就是strict,代表遇到非法字符時(shí)拋出異常;
如果設(shè)置為ignore,則會(huì)忽略非法字符;
如果設(shè)置為replace,則會(huì)用?取代非法字符;
如果設(shè)置為xmlcharrefreplace,則使用XML的字符引用。
這個(gè)方法幫助確實(shí) 是相當(dāng)大的哦。對(duì)于那種在數(shù)據(jù)庫(kù)中存儲(chǔ)了全角與半角的非法字符的問(wèn)題可以這樣來(lái)進(jìn)行解決處理的哦!
字符編碼問(wèn)題永遠(yuǎn)是一個(gè)讓人頭疼的問(wèn)題哈哈!
2.http://www.python.org/dev/peps/pep-0249/
上面提供了Python-DBAPI的常用操作功能。
總結(jié)出來(lái)相關(guān)的API操作方法:
3.總結(jié)出來(lái)Python連接數(shù)據(jù)庫(kù)的一般程序過(guò)程是這樣來(lái)寫(xiě)的:
第一步:導(dǎo)入相關(guān)的模塊
其中MYSQL:
1
|
import MySQLdb |
其中MSSQL:
1
|
import pymssql |
第二步:打開(kāi)連接
其中MYSQL:
1
|
conn = MySQLdb.connect( self .dbhost, self .dbuser, self .dbpasswd, self .database) |
其中MSSQL:
1
|
conn = pymssql.connect(host = self .dbhost,user = self .dbuser,password = self .dbpasswd,database = self .database) |
[通過(guò)本身的函數(shù)原型來(lái)定義出來(lái)這個(gè)方法的]
第三步:連接完了之后就要開(kāi)始創(chuàng)建一個(gè)cursor了。通過(guò)這個(gè)對(duì)象來(lái)對(duì)數(shù)據(jù)庫(kù)發(fā)送一個(gè)請(qǐng)求操作。
代碼:
1
|
curs = conn.cursor() |
相當(dāng)于JAVA中的Statement對(duì)象一樣的。通過(guò)語(yǔ)句來(lái)進(jìn)行提交SQL命令的
第四步:開(kāi)始發(fā)送SQL命令到數(shù)據(jù)庫(kù)服務(wù)器了,可以這樣來(lái)做
1
|
curs.execute(SQL) |
例如:
1
|
curs.execute( "select * from test" ) |
其中的SQL命令可以是任意的SQL語(yǔ)句 可以是執(zhí)行INSERT 操作或DELETE操作也可以是SELECT操作的
要注意到 執(zhí)行完了之后要進(jìn)行commit()提交一次的。
例如:
1
|
cursor.execute( "insert into test(id) values(1)" ) |
如果是執(zhí)行了SELECT操作的話就要進(jìn)行第五步操作了:
第五步:
1
2
|
curs.execute( "select * from test" ) rows = curs.fetchall() |
其中的fetchall()只是我們的cursor對(duì)象的一個(gè)方法而已的。
現(xiàn)在就可以提取出來(lái)相關(guān)信息了
1
2
|
for i in range ( len (rows)): print "Row" ,i, "name" ,rows[i][ 0 ], "value" ,rows[i][ 1 ] |
看我寫(xiě)的代碼:
1
2
3
4
5
6
7
8
9
|
def test( self ): conn = self .connect() sql = "select * from bbs where id<20" curs = conn.cursor() #得到一個(gè)游標(biāo)對(duì)象 curs.execute(sql) #執(zhí)行一個(gè)SQL語(yǔ)句 rows = curs.fetchall() #得到全部的查詢結(jié)果集 for i in range ( len (rows)): # print "Row" ,i, "name" ,rows[i][ 3 ], "value" ,rows[i][ 4 ] conn.close() |
我明白了:通過(guò)這樣的方法的話 得到的一行記錄其實(shí)是一個(gè)元組的數(shù)據(jù)結(jié)構(gòu)的。
要取其中的一個(gè)可以用一個(gè)類似兩維數(shù)組的方法進(jìn)行查詢出來(lái)的。
rows[1][0]:表示第一條記錄中的第一個(gè)位置的值的。
然后再來(lái)看看 將其從數(shù)據(jù)庫(kù)中提取出來(lái)之后進(jìn)行編碼處理與解碼處理
1
2
|
for i in range ( len (rows)): print rows[i][ 4 ].decode( 'gb2312' , 'ignore' ).encode( 'gb2312' ) |
以后操作數(shù)據(jù)庫(kù)的話就可以直接這樣來(lái)寫(xiě)代碼的了!
http://pymssql.sourceforge.net/userguide.html 有詳細(xì)的幫助說(shuō)明文檔的
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。