1. 程式人生 > >python連線SQL Server:Pymssql模組

python連線SQL Server:Pymssql模組

資料庫版本:SQL Server 2012。

按照python版本來選擇下載pymssql模組,這樣才能連線上sql server。

我把檔案下載後放到E盤,安裝pymssql模組:

C:\Users\Administrator>pip install e:\pymssql-2.1.3-cp35-cp35m-win_amd64.whl
Processing e:\pymssql-2.1.3-cp35-cp35m-win_amd64.whl
Installing collected packages: pymssql
Successfully installed pymssql-2.1.3

一、建立資料庫Test、表tb、插入資料

特別需要注意的是:為了避免亂碼問題,這裡Name列是nvarchar型別的(適合中文),不會出現亂碼現象,一開始用的varchar型別出現了亂碼。

create database Test;
go

use test;
go

if object_id('tb') is not null
   drop table tb;
go

CREATE TABLE TB(ID INT,NAME NVARCHAR(20),SCORE NUMERIC(10,2));

INSERT INTO TB(ID,NAME,SCORE)
VALUES(1,'語文',100),
      (2,'數學',80),
	  (3,'英語',900),
	  (4,'政治',65),

	  (5,'物理',65),
	  (6,'化學',85),
	  (7,'生物',55),
	  (8,'地理',100)

二、連線資料庫、查詢、增加、更新資料

connect的引數:
user:使用者名稱
password:密碼
trusted:布林值,指定是否使用windows身份認證登陸
host :主機名
database:資料庫
timeout:查詢超時
login_timeout:登陸超時
charset:資料庫的字符集
as_dict:布林值,指定返回值是字典還是元組
max_conn:最大連線數

# -*- coding:gbk -*-


import pymssql

#資料庫連線
conn=pymssql.connect(host='wc-pc',user='sa',password='ggg',database='Test')

#開啟遊標
cur=conn.cursor();

if not cur:
    raise Exception('資料庫連線失敗!')

sSQL = 'SELECT * FROM TB'

#執行sql,獲取所有資料
cur.execute(sSQL)
result=cur.fetchall()


#1.result是list,而其中的每個元素是 tuple
print(type(result),type(result[0]))


#2.
print('\n\n總行數:'+ str(cur.rowcount))


#3.通過enumerate返回行號
for i,(id,name,v) in enumerate(result):
    print('第 '+str(i+1)+' 行記錄->>> '+ str(id) +':'+ name+ ':' + str(v) )



#4.修改資料
cur.execute("insert into tb(id,name,score) values(9,'歷史',75)")
cur.execute("update tb set score=95 where id=7")
conn.commit() #修改資料後提交事務



#再查一次
cur.execute(sSQL)


#5.一次取一條資料,cur.rowcount為-1
r=cur.fetchone()
i=1

print('\n')

while r:
    id,name,v =r #r是一個元祖
    print('第 '+str(i)+' 行記錄->>> '+ str(id) +':'+ name+ ':' + str(v) )
    r=cur.fetchone()
    i+= 1

conn.close()
基本的步驟就是:

(1)連線資料庫,指定連線引數

(2)開啟cursor,執行sql

(3)通過cursor獲取資料,具體可以是一次獲取所有資料,也可以是一次獲取一行。

 整個結果集是元組列表,就是list型別的,而每一條記錄是一個tuple,也就是元祖。

(4)如果是增、改資料,必須就要呼叫commit()函式來提交事務,否則程式已退出,資料庫裡的資料不會有變化。

(5)最後要用close關閉連線。

執行效果: