網(wǎng)站首頁 編程語言 正文
python調(diào)用pymssql包操作SqlServer數(shù)據(jù)庫的實(shí)現(xiàn)_python
作者:gc_2299 ? 更新時(shí)間: 2022-08-04 編程語言之前的文章介紹了python抓取網(wǎng)頁數(shù)據(jù)并將數(shù)據(jù)保存到本地excel文件,后續(xù)可以將數(shù)據(jù)保存到數(shù)據(jù)庫(SqlServer、mysql等)中,本文學(xué)習(xí)python中操作SqlServer數(shù)據(jù)庫的基本用法,后續(xù)將從網(wǎng)頁中抓取的數(shù)據(jù)保存到SqlServer數(shù)據(jù)庫。
百度python操作SqlServer數(shù)據(jù)庫,大部分搜索結(jié)果中使用pymssql操作SqlServer數(shù)據(jù)庫,本文即基于pymssql包學(xué)習(xí)SqlServer數(shù)據(jù)庫的基本操作方式,并使用之前文章中使用的環(huán)境檢測數(shù)據(jù)庫進(jìn)行數(shù)據(jù)操作測試。
pymssql包可以通過離線和在線方式安裝。離線方式的話,請?jiān)趨⒖嘉墨I(xiàn)2中下載包文件并將其復(fù)制到python目錄下的Lib\site-packages文件夾中,在線安裝的話,在命令行中運(yùn)行下列命令即可安裝。
pip install pymssql
從目前學(xué)習(xí)的內(nèi)容看,pymssql主要通過執(zhí)行sql語句操作數(shù)據(jù)庫,并通過cursor獲取查詢結(jié)果。本文主要學(xué)習(xí)以下基本操作:
- 數(shù)據(jù)庫的連接與關(guān)閉;
- 數(shù)據(jù)查詢;
- 數(shù)據(jù)插入。
數(shù)據(jù)庫的連接與關(guān)閉。pymssql通過調(diào)用pymssql.connect函數(shù)創(chuàng)建數(shù)據(jù)庫連接,并返回Connection對象。調(diào)用Connection對象的cursor函數(shù)獲取cursor對象,后續(xù)使用該對象執(zhí)行sql語句并從數(shù)據(jù)庫中獲取數(shù)據(jù)。所有操作完成后調(diào)用Connection對象的close函數(shù)關(guān)閉鏈接。測試程序及運(yùn)行結(jié)果如下所示。
import pymssql
server = 'XXX.XXX.XXX.XXX'
user = 'XXXXXXX'
password = 'XXXXXXXXXX'
db='EC'
conn = pymssql.connect(server, user, password, db)
cursor = conn.cursor()
cursor.execute('SELECT Count(*) FROM EnvironmentRecord')
print('total data amount = %d' % cursor.fetchone())
conn.close()
數(shù)據(jù)查詢。調(diào)用cursor對象的execute函數(shù)執(zhí)行無參數(shù)或帶參數(shù)的查詢語句。如果是無參數(shù)的sql語句,直接向上面示例中的用法調(diào)用execute函數(shù)即可,如果有參數(shù),則調(diào)用下圖中的第二個(gè)execute函數(shù)。有多種方式獲取查詢結(jié)果,cursor對象的fetchone函數(shù)獲取查詢結(jié)果中的下一行數(shù)據(jù),fetchmany函數(shù)獲取指定數(shù)量的查詢結(jié)果,而fetchall獲取所有的查詢結(jié)果。除了調(diào)用函數(shù),也可以通過迭代器或fetchone循環(huán)獲取所有查詢結(jié)果,從參考文獻(xiàn)3中找到了兩種使用示例,代碼片段如下:
#使用示例1
cursor.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe')
row = cursor.fetchone()
while row:
print("ID=%d, Name=%s" % (row[0], row[1]))
row = cursor.fetchone()
#使用示例2
cursor.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe')
for row in cursor:
#獲取一條記錄中的某個(gè)屬性時(shí),可以通過屬性名稱索引方式獲取
print("ID=%d, Name=%s" % (row['id'], row['name']))
參照上述示例編寫的查詢測試代碼,程序及執(zhí)行結(jié)果如下所示。
import pymssql
server = 'XXX.XXX.XXX.XXX'
user = 'XXXXXXX'
password = 'XXXXXXXXXX'
db='EC'
conn = pymssql.connect(server, user, password, db)
cursor = conn.cursor()
cursor.execute('SELECT * FROM EnvironmentRecord WHERE CreateTime>=%s', '2021-6-19 16:12:00')
for row in cursor:
print('row = %r' % (row,))
conn.close()
數(shù)據(jù)插入。調(diào)用cursor對象的execute執(zhí)行insert語句可以插入單條數(shù)據(jù),同時(shí)調(diào)用executemany函數(shù)則可以插入多條數(shù)據(jù),參考文獻(xiàn)3中給出的多條數(shù)據(jù)插入示例如下。插入語句執(zhí)行后,需要調(diào)用Connection對象的commit函數(shù),否則就不會生效,也可以配置Connection對象的autocommit,讓語句自動(dòng)提交生效。
基于參考文獻(xiàn)3及上圖中的示例,測試插入單條數(shù)據(jù)和多條數(shù)據(jù),程序及執(zhí)行結(jié)果如下所示。
import pymssql
server = 'XXX.XXX.XXX.XXX'
user = 'XXXXXXX'
password = 'XXXXXXXXXX'
db='EC'
conn = pymssql.connect(server, user, password, db)
cursor = conn.cursor()
##sqlStr="INSERT INTO EnvironmentRecord(CreateTime,DHTState,Humidity,Temperature,FlameValue,MQValue)VALUES('2022-05-23 10:00:00',1,54, 22, 962, 202)"
##cursor.execute(sqlStr)
cursor.executemany(
"INSERT INTO EnvironmentRecord(CreateTime,DHTState,Humidity,Temperature,FlameValue,MQValue)VALUES(%s,%d,%d,%d,%d,%d)",
[('2022-05-24 10:00:00',1,54, 22, 962, 202),
('2022-05-24 10:10:00',1,54, 22, 962, 202),
('2022-05-24 10:20:00',1,54, 22, 962, 202)])
conn.commit()
conn.close()
關(guān)于pymssql的詳細(xì)介紹可以查看參考文獻(xiàn)3。本文學(xué)習(xí)了基于pymssql的SqlServer數(shù)據(jù)庫基本操作方法后,后續(xù)會嘗試將之前保存到excel文件中的頁面抓取數(shù)據(jù)保存到SqlServer數(shù)據(jù)庫。
參考文獻(xiàn)
[1]https://blog.csdn.net/XUMENGCAS/article/details/123419220
[2]https://github.com/pymssql/pymssql
[3]https://pymssql.readthedocs.io/en/latest/index.html
原文鏈接:https://blog.csdn.net/gc_2299/article/details/124776619
相關(guān)推薦
- 2022-07-22 比較兩個(gè)對象屬性值是否相同方法
- 2022-01-19 錯(cuò)誤:Cannot construct instance of `xxxx` (no Creator
- 2022-06-28 python生成圖片驗(yàn)證碼的方法_python
- 2022-04-02 C#實(shí)現(xiàn)NPOI的Excel導(dǎo)出詳解_C#教程
- 2022-03-15 eclipse文件上傳錯(cuò)誤:the request doesn‘t contain a multip
- 2022-10-02 Selenium+Python自動(dòng)化測試入門_python
- 2022-06-29 詳解Shell腳本中^M的問題和解決方案_linux shell
- 2022-11-22 react?hooks實(shí)現(xiàn)原理解析_React
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支