教你用Python如何連接SQLServer2000的實例詳解

Y2J
發布: 2017-05-03 16:24:37
原創
2088 人瀏覽過

這篇文章主要介紹了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(&#39;gb2312&#39;, &#39;ignore&#39;).encode(&#39;gb2312&#39;)
登入後複製

以上是教你用Python如何連接SQLServer2000的實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板