不管多少人黑微軟,微軟出品的大多數產品都能夠深入人心,成為精品。在資料庫領域,微軟為專業人士提供SQL Server(簡稱mssql)。為日常辦公人士提供Access與Excel這兩款數據存儲與分析的神器。 ...
不管多少人黑微軟,微軟出品的大多數產品都能夠深入人心,成為精品。在資料庫領域,微軟為專業人士提供SQL Server(簡稱mssql)。為日常辦公人士提供Access與Excel這兩款數據存儲與分析的神器。
SQL Server是微軟在資料庫領域打造的旗艦產品,使用起來安全、穩定、可靠,並且對於SQL語言的語法與特性支持的非常好。長期以來由於微軟敵視開源運動,所以SQL Server只能夠在微軟的Windows平臺上運行。自從微軟擁抱開源後,SQL Server能夠運行在:
◆Windows平臺上,這是自家平臺,不用說肯定支持的最好
◆Linux平臺上,筆者使用後也感覺非常流暢
◆各類雲平臺上,其中微軟自家的Azure是首選
◆Docker中,非常方便進行小型部署、開發
SQL Server是微軟的商業資料庫管理系統,作為開發人員,可以選擇其免費的“Developer”版本。強烈建議使用[官網](https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads)進行下載,安裝界面如下圖所示:
選擇“基本”即可,隨後就是微軟最棒的簡明安裝過程,就可以輕鬆的在本地建立一個SQL Server伺服器。安裝完成後,為了方便操作,建議安裝微軟免費的管理軟體——SQL Server Management Studio (SSMS)。安裝過程也非常簡單。安裝成功後直接打開界面,連接資料庫即可。
如上圖所示,如果不想使用Windows內置的身份驗證(尤其是客戶端與伺服器端是不同的節點,或者操作系統跨平臺),一定要選擇“SQL Server和Windows身份驗證模式",這一混合模式,否則無法登錄。
為了能夠訪問SQL Server,首先安裝相關包。
pip install pymssql
創建資料庫與表
mssql預設的資料庫為master,使用時需要創建新的資料庫與表。這部分的概念與mysql/sqlite相類似。
import pymssql host = 'LAPTOP-11TE8QTB' user = 'sa' password = '88488848' dbname = 'demodb' # 創建資料庫 demodb = pymssql.connect(host=host, user=user, password=password,database='master') democur = demodb.cursor() demodb.autocommit(True) democur.execute(f'create database {dbname};') demodb.autocommit(False) democur.close() demodb.close() # 創建資料庫成功後創建表結構 demodb = pymssql.connect( host=host, user=user, password=password, database=dbname) democur = demodb.cursor() sql_createtable = 'create table demotb(id int identity(1,1) primary key ,pm25 float not null)' democur.execute(sql_createtable) demodb.commit() democur.close() demodb.close()
代碼與mysql的非常類似,但也有幾點不同:
◆由於mssql的要求,創建資料庫時使用了autocommit(True)與autocommit(False)。
◆創建能夠自動增長的ID,不同的資料庫語法幾乎都不相同。mssql使用了identity關鍵字。
使用游標對資料庫進行查詢的過程與mysql非常類似,相關代碼如下。
import random import pymssql host = 'LAPTOP-11TE8QTB' user = 'sa' password = '88488848' dbname = 'demodb' def fakedata(maxtimes): # 連接資料庫 demodb = pymssql.connect( host=host, user=user, password=password, database=dbname) democur = demodb.cursor() # 插入模擬出來的數據。 for _ in range(maxtimes): pm25 = random.uniform(0, 300) insertsql = f'insert into demotb(pm25) values({pm25})' democur.execute(insertsql) demodb.commit() democur.close() demodb.close() def querydata(): # 連接資料庫 demodb = pymssql.connect( host=host, user=user, password=password, database=dbname) democur = demodb.cursor() # 進行一個簡單的查詢,返回多個值 selsql = 'select pm25 from demotb where pm25 >50.0' democur.execute(selsql) for i in democur: print(i) demodb.commit() democur.close() demodb.close() def queryresult(): # 連接資料庫 demodb = pymssql.connect( host=host, user=user, password=password, database=dbname) democur = demodb.cursor() # 進行一個簡單的查詢,返回多個值 selsql = 'select max(pm25) from demotb' democur.execute(selsql) result = democur.fetchone() print(result) demodb.commit() democur.close() demodb.close() fakedata(10) querydata() queryresult()
筆者使用的mssql所在主機名為"LAPTOP-11TE8QTB",可以替換為ip地址。類似的,也可以使用pandas進行資料庫的操作。