欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python操作Sql Server 2008數(shù)據(jù)庫的方法詳解

 更新時間:2018年05月17日 14:43:04   作者:至死孤獨  
這篇文章主要介紹了Python操作Sql Server 2008數(shù)據(jù)庫的方法,結(jié)合實例形式分析了Python使用pyodbc庫操作Sql Server 2008數(shù)據(jù)庫的連接、執(zhí)行sql語句、關(guān)閉連接等相關(guān)操作技巧與注意事項,需要的朋友可以參考下

本文實例講述了Python操作Sql Server 2008數(shù)據(jù)庫的方法。分享給大家供大家參考,具體如下:

最近由于公司的一個項目需要,需要使用Sql Server 2008數(shù)據(jù)庫,開發(fā)語言使用Python,并基于windows平臺上的Wing IDE4.0進行。

之前并未使用過Sql Server數(shù)據(jù)庫,這次也當作一次練手,并把這次數(shù)據(jù)庫前期開發(fā)過程中遇到的一些問題進行記錄。

一、關(guān)于pyodbc庫和pymssql庫的選擇

在使用python語言進行開發(fā)之前,需要確定使用哪種第三方的數(shù)據(jù)庫操作接口,目前Python提供了一些庫,如pymssql和pyodbc,目前網(wǎng)上資料比較多的也是這兩個了。剛開始我嘗試安裝并使用了pymssql庫,但是始終無法通過python應用程序遠程訪問連接Sql Server數(shù)據(jù)庫,由于對windows平臺又不太熟悉,網(wǎng)上查了一些資料未果,說是需要依賴feeds,還需要設(shè)置各種變量等,最終我放棄了它改用pyodbc,雖然也遇到一些小問題,但是總體來說非常順利。

二、關(guān)于pyodbc庫的一些接口說明

基于第三方python庫來訪問Sql Server數(shù)據(jù)庫的過程非常簡單(其實除了能訪問sql server外,它還可以訪問其它數(shù)據(jù)庫,因為它們都基于標準的DB-API2.0標準),總共只需要四步:打開并連接數(shù)據(jù)庫connect、 獲取游標指針、執(zhí)行數(shù)據(jù)庫sql操作、關(guān)閉數(shù)據(jù)庫連接

1 打開連接數(shù)據(jù)庫

復制代碼 代碼如下:
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=localhost;DATABASE=testdb;UID=me;PWD=pass')

或者是:

復制代碼 代碼如下:
cnxn = pyodbc.connect(DRIVER='{SQL Server}',SERVER='localhost',DATABASE='testdb',UID='me',PWD='pass')

這里簡單說明一下參數(shù):

DRIVER='{SQL Server}'這個一般是固定的,除非你在Sql Server作了更改。
SERVER:此參數(shù)為數(shù)據(jù)庫服務器名稱,不是"192.168.0.X"這種,一般在安裝時命名好了,我的是:ZHANGHUAMIN\MSSQLSERVER_ZHM
DATABASE:此參數(shù)指的是Sql Server內(nèi)具體的數(shù)據(jù)庫了,使用這個connect接口連接之前在sqlserver內(nèi)應該是已經(jīng)先創(chuàng)建好并存在的,否則連接不上。
UID:用戶名
PWD:密碼

執(zhí)行完畢后,如果成功將返回一個數(shù)據(jù)庫連接句柄。

2 獲取游標指針

cursor = cnxn.cursor()

后面對數(shù)據(jù)庫執(zhí)行的sql語句將使用游標指針來操作

3 執(zhí)行數(shù)據(jù)庫sql操作

cursor.execute("select user_id, user_name from users") #調(diào)用游標指針的execute方法執(zhí)行sql語句
row = cursor.fetchone() #sql語句執(zhí)行結(jié)果的獲取,如果需要一次獲取多條記錄,可以使用cursor.fetchall()方法
if row:
  print row

有時對數(shù)據(jù)庫執(zhí)行完sql語句后需要對此事務進行提交,使用如下接口:

cnxn.commit() 

特別是當創(chuàng)建一個數(shù)據(jù)庫或數(shù)據(jù)表,若未進行提交事務,在Sql Server2008終端上將找不到創(chuàng)建的數(shù)據(jù)庫及數(shù)據(jù)表,如果提交后,在sql server2008通過終端的查詢sql 語句就可以即時查到。注:提交事務的commit方法屬于數(shù)據(jù)庫的連接句柄對象

4 關(guān)閉數(shù)據(jù)庫連接

cnxn.close() 

與文件操作類似,不再說明。

三、用python操作Sql Server 2008數(shù)據(jù)庫的具體例程

#!/usr/bin/python
#coding=utf-8
#-------------------------------------------------------------------------------
# Name: datamapper.py
# Purpose: using pyodbc library to operate database
#
# Author: huamin.zhang
#
# Created: 20/04/2013
#-------------------------------------------------------------------------------
import pyodbc
import time
class ODBC_MS:
  ''''' 對pyodbc庫的操作進行簡單封裝
  pyodbc庫的下載地址:http://code.google.com/p/pyodbc/downloads/list
  使用該庫時,需要在Sql Server Configuration Manager里面將TCP/IP協(xié)議開啟
  此類完成對數(shù)據(jù)庫DB的連接/查詢/執(zhí)行操作
  正確的連接方式如下:
  cnxn = pyodbc.connect('DRIVER={SQL SERVER};SERVER=ZHANGHUAMIN\MSSQLSERVER_ZHM;DATABASE=AdventureWorks2008;UID=sa;PWD=wa1234')
  cnxn = pyodbc.connect(DRIVER='{SQL SERVER}',SERVER=r'ZHANGHUAMIN\MSSQLSERVER_ZHM',DATABASE='AdventureWorks2008',UID='sa',PWD='wa1234',charset="utf-8")
  '''
  def __init__(self, DRIVER,SERVER, DATABASE, UID, PWD):
    ''''' initialization '''
    self.DRIVER = DRIVER
    self.SERVER = SERVER
    self.DATABASE = DATABASE
    self.UID = UID
    self.PWD = PWD
  def __GetConnect(self):
    ''''' Connect to the DB '''
    if not self.DATABASE:
      raise(NameError,"no setting db info")
    self.conn = pyodbc.connect(DRIVER=self.DRIVER, SERVER=self.SERVER, DATABASE=self.DATABASE, UID=self.UID, PWD=self.PWD, charset="UTF-8")
    #self.conn = pyodbc.connect(DRIVER=self.DRIVER, SERVER=self.SERVER, DATABASE=self.DATABASE, UID=self.UID, PWD=self.PWD)
    cur = self.conn.cursor()
    if not cur:
      raise(NameError,"connected failed!")
    else:
      return cur
  def ExecQuery(self, sql):
    ''''' Perform one Sql statement '''
    cur = self.__GetConnect() #建立鏈接并創(chuàng)建數(shù)據(jù)庫操作指針
    cur.execute(sql)#通過指針來執(zhí)行sql指令
    ret = cur.fetchall()#通過指針來獲取sql指令響應數(shù)據(jù)
    cur.close()#游標指標關(guān)閉
    self.conn.close()#關(guān)閉數(shù)據(jù)庫連接
    return ret
  def ExecNoQuery(self,sql):
    ''''' Person one Sql statement like write data, or create table, database and so on'''
    cur = self.__GetConnect()
    cur.execute(sql)
    self.conn.commit()#連接句柄來提交
    cur.close()
    self.conn.close()
def main():
  ms = ODBC_MS('{SQL SERVER}', r'ZHANGHUAMIN\MSSQLSERVER_ZHM', 'zhm_db', 'sa', 'wa1234')#zhm_db數(shù)據(jù)庫是在sql server 終端里先創(chuàng)建好的
  #ms.ExecNoQuery("drop table Customers_test")
  sql = '''''CREATE TABLE Customers_test
  (
    CustomerNo   int       IDENTITY   NOT NULL,
    CustomerName  varchar(30)         NOT NULL,
    Address1    nvarchar(30)         NOT NULL ,
    Address2    nvarchar(30)         NOT NULL,
    City      nvarchar(20)         NOT NULL,
    State     nchar(20)          NOT NULL,
    Zip      varchar(10)         NOT NULL,
    Contact    varchar(25)         NOT NULL,
    Phone     char(15)           NOT NULL,
    FedIDNo    varchar(9)          NOT NULL,
    DateInSystem  smalldatetime        NOT NULL
  );'''
  ms.ExecNoQuery(sql)
  #注意:在進行插入操作時,自增長度不能夠?qū)懭?
  sql = u'''''insert into Customers_test
  (
    CustomerName,
    Address1,
    Address2,
    City,
    State,
    Zip,
    Contact,
    Phone,
    FedIDNo,
    DateInSystem
  )
  VALUES
  (
    'zhm', '北京市朝陽區(qū)', '北京市朝陽區(qū)', '北京', '哈哈','3625514', '18001226509', '010-88765879', '21', '2012-09-09'
  );
  '''
  ms.ExecNoQuery(sql)
if __name__ == '__main__':
  main()

說明:我之前連接了一個Sql Server自帶的AdventureWorks2008數(shù)據(jù)庫例程,并在其中創(chuàng)建了一個如上數(shù)據(jù)表Customers_test,然后插入一條如上記錄,結(jié)果在Sql Server2008的終端上用Select * FROM Customers_test查詢,結(jié)果對包含中文信息字段的數(shù)據(jù)變成如“??????”的亂碼,經(jīng)過倒騰了一上午,唯一可能解釋的原因可能在于AdventureWorks2008數(shù)據(jù)庫做了一些我不知道的約束,中文所對應的編碼它不支持。 因為在如上例程中,我自己創(chuàng)建的zhm_db數(shù)據(jù)庫,并在其中創(chuàng)建數(shù)據(jù)表,然后插入記錄,同樣的在Sql Server終端里用select查詢,中文也是可以正常顯示的。

注意,在python程序中需要增加:#coding = utf-8編碼,并在連接connect內(nèi)增加charset = "utf-8"指明字符集為utf-8編碼即可。這樣可以防止亂碼的出現(xiàn)

最后在Sql Server 2008內(nèi)通過終端使用SELECT * FROM Customers_test顯示的結(jié)果如下:

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python常見數(shù)據(jù)庫操作技巧匯總》、《Python編碼操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設(shè)計有所幫助。

相關(guān)文章

  • Python實現(xiàn)繪圖散點圖(scatter)

    Python實現(xiàn)繪圖散點圖(scatter)

    這篇文章主要介紹了Python實現(xiàn)繪圖散點圖方式(scatter),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 解決django后臺管理界面添加中文內(nèi)容亂碼問題

    解決django后臺管理界面添加中文內(nèi)容亂碼問題

    今天小編就為大家分享一篇解決django后臺管理界面添加中文內(nèi)容亂碼問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 深入理解Django的中間件middleware

    深入理解Django的中間件middleware

    這篇文章主要給大家介紹了關(guān)于Django中的中間件middleware的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-03-03
  • Pycharm技巧之代碼跳轉(zhuǎn)該如何回退

    Pycharm技巧之代碼跳轉(zhuǎn)該如何回退

    用Pycharm寫Python代碼有一段時間了,最近發(fā)現(xiàn)了一個Pycharm的一個小技巧想分享給大家,下面這篇文章主要給大家介紹了關(guān)于Pycharm代碼跳轉(zhuǎn)該如何回退的相關(guān)資料,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-07-07
  • Python如何將PDF拆分成多個文件(最新推薦)

    Python如何將PDF拆分成多個文件(最新推薦)

    在 Python 中,你可以使用 PyPDF2 庫來拆分 PDF 文件,以下是一個簡單的示例,演示如何將一個 PDF 文件拆分為多個單頁 PDF 文件,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • python request post 列表的方法詳解

    python request post 列表的方法詳解

    這篇文章主要介紹了python request post 列表的方法詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Python讀取TIF影像的多種方法

    Python讀取TIF影像的多種方法

    Python提供了豐富的庫來讀取和處理TIFF文件,其中PIL庫是最常用的,本文給大家介紹Python讀取TIF影像的幾種方法,需要的朋友可以參考下
    2023-07-07
  • python字符串駐留機制的使用范圍知識點詳解

    python字符串駐留機制的使用范圍知識點詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于python字符串駐留機制的使用范圍相關(guān)知識點內(nèi)容,有興趣的朋友們可以學習下。
    2021-09-09
  • Python實現(xiàn)剪刀石頭布小游戲(與電腦對戰(zhàn))

    Python實現(xiàn)剪刀石頭布小游戲(與電腦對戰(zhàn))

    這篇文章給大家分享Python基礎(chǔ)實現(xiàn)與電腦對戰(zhàn)的剪刀石頭布小游戲,練習if while輸入和輸出,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2019-12-12
  • Python實現(xiàn)對excel文件列表值進行統(tǒng)計的方法

    Python實現(xiàn)對excel文件列表值進行統(tǒng)計的方法

    這篇文章主要介紹了Python實現(xiàn)對excel文件列表值進行統(tǒng)計的方法,涉及Python基于win32com組件操作表格文件的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07

最新評論