您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關使用Python怎么操作Sql Server 2008數據庫,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
一、關于pyodbc庫和pymssql庫的選擇
在使用python語言進行開發之前,需要確定使用哪種第三方的數據庫操作接口,目前Python提供了一些庫,如pymssql和pyodbc,目前網上資料比較多的也是這兩個了。剛開始我嘗試安裝并使用了pymssql庫,但是始終無法通過python應用程序遠程訪問連接Sql Server數據庫,由于對windows平臺又不太熟悉,網上查了一些資料未果,說是需要依賴feeds,還需要設置各種變量等,最終我放棄了它改用pyodbc,雖然也遇到一些小問題,但是總體來說非常順利。
二、關于pyodbc庫的一些接口說明
基于第三方python庫來訪問Sql Server數據庫的過程非常簡單(其實除了能訪問sql server外,它還可以訪問其它數據庫,因為它們都基于標準的DB-API2.0標準),總共只需要四步:打開并連接數據庫connect、 獲取游標指針、執行數據庫sql操作、關閉數據庫連接
1 打開連接數據庫
復制代碼 代碼如下:
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')
這里簡單說明一下參數:
DRIVER='{SQL Server}'
這個一般是固定的,除非你在Sql Server作了更改。
SERVER:此參數為數據庫服務器名稱,不是"192.168.0.X"這種,一般在安裝時命名好了,我的是:ZHANGHUAMIN\MSSQLSERVER_ZHM
DATABASE:此參數指的是Sql Server內具體的數據庫了,使用這個connect接口連接之前在sqlserver內應該是已經先創建好并存在的,否則連接不上。
UID:用戶名
PWD:密碼
執行完畢后,如果成功將返回一個數據庫連接句柄。
2 獲取游標指針
cursor = cnxn.cursor()
后面對數據庫執行的sql語句將使用游標指針來操作
3 執行數據庫sql操作
cursor.execute("select user_id, user_name from users") #調用游標指針的execute方法執行sql語句 row = cursor.fetchone() #sql語句執行結果的獲取,如果需要一次獲取多條記錄,可以使用cursor.fetchall()方法 if row: print row
有時對數據庫執行完sql語句后需要對此事務進行提交,使用如下接口:
cnxn.commit()
特別是當創建一個數據庫或數據表,若未進行提交事務,在Sql Server2008終端上將找不到創建的數據庫及數據表,如果提交后,在sql server2008通過終端的查詢sql 語句就可以即時查到。注:提交事務的commit
方法屬于數據庫的連接句柄對象
4 關閉數據庫連接
cnxn.close()
與文件操作類似,不再說明。
三、用python操作Sql Server 2008數據庫的具體例程
#!/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協議開啟 此類完成對數據庫DB的連接/查詢/執行操作 正確的連接方式如下: 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() #建立鏈接并創建數據庫操作指針 cur.execute(sql)#通過指針來執行sql指令 ret = cur.fetchall()#通過指針來獲取sql指令響應數據 cur.close()#游標指標關閉 self.conn.close()#關閉數據庫連接 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數據庫是在sql server 終端里先創建好的 #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) #注意:在進行插入操作時,自增長度不能夠寫入 sql = u'''''insert into Customers_test ( CustomerName, Address1, Address2, City, State, Zip, Contact, Phone, FedIDNo, DateInSystem ) VALUES ( 'zhm', '北京市朝陽區', '北京市朝陽區', '北京', '哈哈','3625514', '18001226509', '010-88765879', '21', '2012-09-09' ); ''' ms.ExecNoQuery(sql) if __name__ == '__main__': main()
說明:我之前連接了一個Sql Server自帶的AdventureWorks2008數據庫例程,并在其中創建了一個如上數據表Customers_test,然后插入一條如上記錄,結果在Sql Server2008的終端上用Select * FROM Customers_test
查詢,結果對包含中文信息字段的數據變成如“??????”的亂碼,經過倒騰了一上午,唯一可能解釋的原因可能在于AdventureWorks2008數據庫做了一些我不知道的約束,中文所對應的編碼它不支持。 因為在如上例程中,我自己創建的zhm_db數據庫,并在其中創建數據表,然后插入記錄,同樣的在Sql Server終端里用select查詢,中文也是可以正常顯示的。
注意,在python程序中需要增加:#coding = utf-8
編碼,并在連接connect內增加charset = "utf-8"
指明字符集為utf-8編碼即可。這樣可以防止亂碼的出現
最后在Sql Server 2008內通過終端使用SELECT * FROM Customers_test
顯示的結果如下:
1、簡單易用,與C/C++、Java、C# 等傳統語言相比,Python對代碼格式的要求沒有那么嚴格;2、Python屬于開源的,所有人都可以看到源代碼,并且可以被移植在許多平臺上使用;3、Python面向對象,能夠支持面向過程編程,也支持面向對象編程;4、Python是一種解釋性語言,Python寫的程序不需要編譯成二進制代碼,可以直接從源代碼運行程序;5、Python功能強大,擁有的模塊眾多,基本能夠實現所有的常見功能。
上述就是小編為大家分享的使用Python怎么操作Sql Server 2008數據庫了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。