python對於sqlserver的基本操作

2021-08-29 03:40:08 字數 4757 閱讀 9297

基本步驟:

匯入pymssql庫

建立連線conn

常用引數:

host:主機

user:使用者名稱

password:密碼

database:資料庫

charset:字符集,『utf8』

as_dict:查詢結果list列表中的元素是否以字典返回(預設false,列表中元素為元組)

autocommit:自動提交事務(預設false,需要使用commit()提交事務)

通過conn開啟游標cursor(返回none開啟失敗),執行sql語句

使用獲取查詢結果,cursor.fetchall()獲取所有未獲取的記錄,cursor.fetchone()獲取第一條記錄,cursor.fetchmany(i)獲取前i條記錄

insert,update,delete操作後,需要conn.commit()提交事務,儲存操作

操作結束,conn.close()關閉資料庫連線

>>

>

import pymssql

# 建立連線

>>

> conn=pymssql.connect(host=

'host'

,user=

'user'

,password=

'password'

,database=

'test'

,charset=

'utf8'

)# 開啟游標

>>

> cur=conn.cursor(

)# 執行sql查詢語句

>>

> cur.execute(

'select * from test1'

)# 游標位置開始獲取第一條記錄

>>

> rs=cur.fetchone(

)>>

>

print

(rs)(1

,'a '

)# 游標位置開始獲取多條記錄

>>

> rs=cur.fetchmany(2)

>>

>

print

(rs)[(

2,'b '),

(3,'c ')]

# 獲取所有剩下未獲取的記錄,之前已經獲取過的記錄無法再次獲取

>>

> rs=cur.fetchall(

)# 預設查詢記錄為list型別,元素為tuple型別

>>

>

print

(rs)[(

4,'d '),

(5,'e '),

(6,'f '),

(7,'g '),

(8,'h '),

(9,'i '),

(10,'j ')]

# 只有fetchall()獲取記錄後才能獲取行數,未獲取記錄或者fetchone()和fetchmany()的rowcount都是-1

# rowcount不僅僅是fetchall()所獲取的行數,還包括之前fetchone()和fetchmany()獲取的行數,即整個查詢結果的所有行數

>>

> cur.rowcount

10# 建立連線時新增引數as_dict=true,查詢記錄list裡的元素則為dict型別

>>

> conn=pymssql.connect(host=

'host'

,user=

'user'

,password=

'password'

,database=

'test'

,charset=

'utf8'

,as_dict=

true

)>>

>

print

(rs)[,

,,,,

,,,,

]# insert,update,delete操作

>>

> cur.execute(

"insert into test1 (value) values ('k')"

)# lastrowid,獲取插入記錄的id號,id需在資料庫中設定為自動增量標識

>>

>

int(cur.lastrowid)

11# 返回受影響的行數

>>

> cur.rowcount

1# 事務回滾,撤銷未commit的更改

>>

> conn.rollback(

)# 執行insert,update,delete操作後,需commit()提交事務,否則連線關閉後更改失效

>>

> conn.commit(

)# 查詢語句引數化,將所需引數按順序放入元組中,再將該元組作為引數代入執行,注意單個元素的元組需要加逗號!

>>

> cur.execute(

'select * from test1 where value=%s',(

'd',))

>>

> rs=cur.fetchall(

)>>

>

print

(rs)[(

4,'d ')]

# 無引數儲存過程

>>

> cursor.callproc(

'sp_***xx'

)# 有引數儲存過程

>>

> cursor.callproc(

'sp_***xx',(

'abc',)

)# 有output的儲存過程,但沒成功,返回值msg應當為代入儲存過程的引數元組

>>

> msg=cursor.callproc(

'sp_***xx',(

'abc'

,pymssql.output(

str)))

>>

> output=msg[1]

# 有返回值的儲存過程也沒成功,網上最多的方法都是以sql語句進行操作

# sp_test1說明:input引數@arg,查詢test1所有記錄,output返回行數,returnvalue返回999

# 此sql共返回3個記錄集,第乙個是查詢結果,第二個是output,第三個是returnvalue

>>

> sql=

"declare @return_value int,@rows int;exec @return_value = [dbo].[sp_test1] @arg = n'b',@rows = @rows output;select @rows as n'@rows';select 'return value' = @return_value"

>>

> rs=cur.fetchall(

)>>

> rs[(

1,'a '),

(2,'b '),

(3,'c '),

(4,'d '),

(5,'e '),

(6,'f '),

(7,'g '),

(8,'h '),

(9,'i '),

(10,'j '),

(11,'k ')]

# 指向下個記錄集

>>

> cur.nextset(

)>>

> rs=cur.fetchall(

)>>

> rs[(

11,)]

# 指向下個記錄集

>>

> cur.nextset(

)>>

> rs=cur.fetchall(

)>>

> rs[(

999,)]

>>

> cur.close(

)>>

> conn.close(

)

使用with語句簡化操作,無需進行close()操作:

>>

>

with pymssql.connect(host=

'host'

,user=

'user'

,password=

'password'

,database=

'test'

,charset=

'utf8'

)as conn:

with conn.cursor(

)as cur:

cur.execute(

'select * from test1'

) rs=cur.fetchall(

)for row in rs:

print

(row[0]

,row[1]

)1 a

2 b

3 c

4 d

5 e

6 f

7 g

8 h

9 i

10 j

11 k

Python 讀取文字檔案到sql server

import json import pymysql import sqlite3 import re import pyodbc import os 載入所需模組 sqlconn pyodbc.connect driver server 伺服器名稱 database 資料庫名稱 連線資料庫 cur...

ISA SERVER日誌存放SQL SERVER中

在預設安裝 isa 2004 或是2006後,將會自動安裝簡易版的 sql server 來存放防火牆與 webproxy 的連線訪問日誌 可是由於 msde 僅限於單機連線的使用 並且在訪問上也有容量大小的限制 因此為了提公升整體 isa 的執行能力 建議可以改由將這些頻繁的日誌檔案訪問 寫入到內...

鏈結sqlserver 安裝sqlserver

在進行部署專案的時候。特別是重做系統之後要注意,最好安裝資料庫,在安裝其他編輯軟體 而且,有乙個特點是先安裝低版本可以安裝高版本,但是你裝高版本後很難安裝高版本 我這有個sqlserver 2008 r2 在安裝時,不要害怕,一般都是預設安裝,讓你操作的時候 也不多,而且,安裝的位置一般都是在系統盤...