溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

使用Python怎么操作Sql Server 2008數(shù)據(jù)庫(kù)

發(fā)布時(shí)間:2021-05-19 16:58:42 來源:億速云 閱讀:206 作者:Leah 欄目:開發(fā)技術(shù)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)使用Python怎么操作Sql Server 2008數(shù)據(jù)庫(kù),文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

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

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

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

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

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

復(fù)制代碼 代碼如下:

cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=localhost;DATABASE=testdb;UID=me;PWD=pass')

或者是:

復(fù)制代碼 代碼如下:

cnxn = pyodbc.connect(DRIVER='{SQL Server}',SERVER='localhost',DATABASE='testdb',UID='me',PWD='pass')

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

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

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

2 獲取游標(biāo)指針

cursor = cnxn.cursor()

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

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

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

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

cnxn.commit()

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

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

cnxn.close()

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

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

#!/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:
  ''''' 對(duì)pyodbc庫(kù)的操作進(jìn)行簡(jiǎn)單封裝
  pyodbc庫(kù)的下載地址:http://code.google.com/p/pyodbc/downloads/list
  使用該庫(kù)時(shí),需要在Sql Server Configuration Manager里面將TCP/IP協(xié)議開啟
  此類完成對(duì)數(shù)據(jù)庫(kù)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ù)庫(kù)操作指針
    cur.execute(sql)#通過指針來執(zhí)行sql指令
    ret = cur.fetchall()#通過指針來獲取sql指令響應(yīng)數(shù)據(jù)
    cur.close()#游標(biāo)指標(biāo)關(guān)閉
    self.conn.close()#關(guān)閉數(shù)據(jù)庫(kù)連接
    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ù)庫(kù)是在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)
  #注意:在進(jìn)行插入操作時(shí),自增長(zhǎng)度不能夠?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()

說明:我之前連接了一個(gè)Sql Server自帶的AdventureWorks2008數(shù)據(jù)庫(kù)例程,并在其中創(chuàng)建了一個(gè)如上數(shù)據(jù)表Customers_test,然后插入一條如上記錄,結(jié)果在Sql Server2008的終端上用Select * FROM Customers_test查詢,結(jié)果對(duì)包含中文信息字段的數(shù)據(jù)變成如“??????”的亂碼,經(jīng)過倒騰了一上午,唯一可能解釋的原因可能在于AdventureWorks2008數(shù)據(jù)庫(kù)做了一些我不知道的約束,中文所對(duì)應(yīng)的編碼它不支持。 因?yàn)樵谌缟侠讨校易约簞?chuàng)建的zhm_db數(shù)據(jù)庫(kù),并在其中創(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é)果如下:

使用Python怎么操作Sql Server 2008數(shù)據(jù)庫(kù)

Python的優(yōu)點(diǎn)有哪些

1、簡(jiǎn)單易用,與C/C++、Java、C# 等傳統(tǒng)語言相比,Python對(duì)代碼格式的要求沒有那么嚴(yán)格;2、Python屬于開源的,所有人都可以看到源代碼,并且可以被移植在許多平臺(tái)上使用;3、Python面向?qū)ο?,能夠支持面向過程編程,也支持面向?qū)ο缶幊蹋?、Python是一種解釋性語言,Python寫的程序不需要編譯成二進(jìn)制代碼,可以直接從源代碼運(yùn)行程序;5、Python功能強(qiáng)大,擁有的模塊眾多,基本能夠?qū)崿F(xiàn)所有的常見功能。

上述就是小編為大家分享的使用Python怎么操作Sql Server 2008數(shù)據(jù)庫(kù)了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI