Python連接SQL?server數(shù)據(jù)庫并進行簡單查詢的操作詳解
前言
學(xué)習(xí)Python 連接 數(shù)據(jù)庫
解決問題:
1:如何連接數(shù)據(jù)庫
2:如何進行簡單查詢
3:如何將查詢中的中文亂碼給修復(fù)
4:如何進行插入,更新,刪除
一、如何連接數(shù)據(jù)庫?
#pip install pymssql 先安裝 import pymssql #導(dǎo)入模塊 connect = pymssql.connect('(local)','sa','123456','School') #connect = pymssql.connect('服務(wù)器名稱', '用戶名', '密碼', '庫名') # 建立連接 if connect: print("連接成功") #輸出 連接成功
二、如何進行簡單查詢
cursor = connect.cursor()#創(chuàng)建一個游標(biāo)對象python里的sql語句都要通過cursor來執(zhí)行 sql="select * from Student" #一個簡單的sql查詢語句 cursor.execute(sql)#執(zhí)行sql語句 row = cursor.fetchone() #用fetchone 獲取游標(biāo)的數(shù)據(jù),如果是首次就定位首行 while row: # 循環(huán)讀取所有結(jié)果 print(row) row = cursor.fetchone()#取下一個內(nèi)容 cursor.close() connect.close() #結(jié)果出現(xiàn)亂碼,下面我們解決 <pymssql._pymssql.Connection object at 0x0000025DBDEE9F00> 連接成功 (2021402075, '???×', '?D', datetime.datetime(1900, 2, 7, 0, 0), 'MA') (2021402076, '???×', '?D', datetime.datetime(2003, 3, 18, 0, 0), 'CS') (2021402077, '′oò°ó£', '??', datetime.datetime(2009, 4, 20, 0, 0), 'MA') (2021402078, '′oè?ò°?·', '??', datetime.datetime(2003, 6, 20, 0, 0), 'CS') (2021402079, 'è??ò3?ì?', '??', datetime.datetime(2006, 7, 7, 0, 0), 'MA') (2021402080, '?è?à', '??', datetime.datetime(2003, 6, 6, 0, 0), 'CS')
三、如何將查詢中的中文亂碼給修復(fù)
方法一
主要在pymssql.connect 中添加charset = ‘cp936’
原因:因為字符串字段類型為:varchar,造成讀取數(shù)據(jù)亂碼。
import pymssql #導(dǎo)入模塊 connect = pymssql.connect('(local)','sa','123456','School',charset='cp936') #connect = pymssql.connect('服務(wù)器名稱', '用戶名', '密碼', '庫名') # 建立連接 if connect: print(connect) print("連接成功") cursor = connect.cursor() sql = "select * from Student" cursor.execute(sql) row = cursor.fetchone() while row: print(row) row = cursor.fetchone() cursor.close() connect.close() #結(jié)果 <pymssql._pymssql.Connection object at 0x00000115E49A9FC0> 連接成功 (2021402075, '蕭炎', '男', datetime.datetime(1900, 2, 7, 0, 0), 'MA') (2021402076, '蕭炎', '男', datetime.datetime(2003, 3, 18, 0, 0), 'CS') (2021402077, '春野櫻', '女', datetime.datetime(2009, 4, 20, 0, 0), 'MA') (2021402078, '春日野穹', '女', datetime.datetime(2003, 6, 20, 0, 0), 'CS') (2021402079, '日向雛田', '女', datetime.datetime(2006, 7, 7, 0, 0), 'MA') (2021402080, '娜美', '女', datetime.datetime(2003, 6, 6, 0, 0), 'CS') #成功完美的查詢
方法一的缺點:
如果SQL語句中含有中文,就會得不到數(shù)據(jù),如sql中有:where table_colum = ‘魏本明’;即便將sql語句:sql.encode(‘cp936’),也不行?。?/p>
方法二
更通用全部
直接用sql語句將varchar轉(zhuǎn)為nvarchar類型,不再需要指定charset了,就沒問題了(注意轉(zhuǎn)換列名稱起別名),直接寫sql語句如下
select convert(nvarchar(50),table_colum) as 'nvarchar_colum' from mytable where convert(nvarchar(50),table_colum) = '魏本明' 就是將需要轉(zhuǎn)換的列(如,varchar),轉(zhuǎn)換為nvarchar,也可以完成
例如:
import pymssql #導(dǎo)入模塊 connect = pymssql.connect('(local)','sa','123456','School') #connect = pymssql.connect('服務(wù)器名稱', '用戶名', '密碼', '庫名') # 建立連接 if connect: print(connect) print("連接成功") cursor = connect.cursor()#創(chuàng)建一個游標(biāo)對象python里的sql語句都要通過cursor來執(zhí)行 sql="select Ssno,convert(nvarchar(50),Snam) as 'a',convert(nvarchar(50),Ssex) as 'b' from Student" cursor.execute(sql)#執(zhí)行語句 row = cursor.fetchone()#用fetchone 獲取游標(biāo)的數(shù)據(jù),如果是首次就定位首行 print(row) while row: # 循環(huán)讀取所有結(jié)果 print("id=%s,Name=%s,Sex=%s" % (row[0], row[1], row[2])) # 輸出結(jié)果 row = cursor.fetchone()#取下一個內(nèi)容 cursor.close() connect.close() 結(jié)果: <pymssql._pymssql.Connection object at 0x0000019C35BBC0C0> 連接成功 (2021402075, '蕭炎', '男', datetime.datetime(1900, 2, 7, 0, 0), 'MA') (2021402076, '蕭炎', '男', datetime.datetime(2003, 3, 18, 0, 0), 'CS') (2021402077, '春野櫻', '女', datetime.datetime(2009, 4, 20, 0, 0), 'MA') (2021402078, '春日野穹', '女', datetime.datetime(2003, 6, 20, 0, 0), 'CS') (2021402079, '日向雛田', '女', datetime.datetime(2006, 7, 7, 0, 0), 'MA') (2021402080, '娜美', '女', datetime.datetime(2003, 6, 6, 0, 0), 'CS')
四、如何進行插入,更新,刪除
進行更新數(shù)據(jù)的操作都要用到connect.commit()函數(shù)
update,delete,insert等修改表中數(shù)據(jù)的需要commit
commit字面意思就是 投入
然后更改表的結(jié)構(gòu)就不用了,因為他們內(nèi)置了commit
create,drop,alter等修改表結(jié)構(gòu)的,就不需要commit,因為內(nèi)部隱藏了commit
不行的時候加上conn.autocommit(True)
推薦先在SQL中查看語句有沒有語法錯誤在放回來運行,能解決你50%以上的報錯
總結(jié)
我下面進行一個小項目全部都在python中完成
目標(biāo):
1:創(chuàng)建一個數(shù)據(jù)庫
2:創(chuàng)建一個表
3:為這個表插入數(shù)據(jù)
4:更新插入的數(shù)據(jù)
5:查詢前三行數(shù)據(jù)
6:插入一列屬性
import pymssql # 1:創(chuàng)建一個數(shù)據(jù)庫 conn = pymssql.connect('.','sa','123456')#單純連接數(shù)據(jù)庫 if conn: print("連接成功") cursor = conn.cursor() #創(chuàng)建執(zhí)行語句 conn.autocommit(True) #創(chuàng)建庫的核心!!! sql_DATA =""" CREATE DATABASE PY_DATA ON PRIMARY (NAME = 'PY_DATA', FILENAME = 'D:\DATA\PY_DATA.MDF' , SIZE = 5MB, MAXSIZE = 20MB, FILEGROWTH = 20%) LOG ON (NAME ='PY_DATA_LOG', FILENAME = 'D:\DATA\PY_DATA_LOG. LDF', SIZE = 5MB, MAXSIZE = 10MB, FILEGROWTH = 2MB) """ cursor.execute(sql_DATA) cursor.close() conn.autocommit(False) conn.close() ---------------------------------------------------------------------------- #2:創(chuàng)建一個表 import pymssql ##連接 conn = pymssql.connect('.','sa','123456','School') if conn: print("連接成功") ##操作 cursor = conn.cursor() conn.autocommit(True)#是修改表的結(jié)構(gòu)都要有嗎? sql_TABLE = """ Create Table Student_3( ID int primary key, Name varchar(50), Age int) """ cursor.execute(sql_TABLE) conn.autocommit(False) conn.close() ---------------------------------------------------------------------------- 3:為這個表插入數(shù)據(jù) import pymssql conn = pymssql.connect('.','sa','123456','PY_DATA') if conn: print("True") cursor = conn.cursor() a = "松仁、秉峰、泳紀海奉、威劍、頌和、祥益、騰恩、柏鑠、孟深、忠莊、軒哲、鎧鑫、仕倫、儒億、積進信欽、賢元、程基、安泉、樹昌、祝斌、一科、游湖、普濟、中堅" a = a.split("、") for i in range(len(a)): sql_insert = f"insert into Student Values({i},'{a[i]}',18)" print(sql_insert) cursor.execute(sql_insert) conn.commit() cursor.close() conn.close() ---------------------------------------------------------------------------- 4:更新插入的數(shù)據(jù) import pymssql conn = pymssql.connect('.','sa','123456','PY_DATA') if conn: print("True") cursor = conn.cursor() sql_updata = "update student set Name='消息' where ID = 12" cursor.execute(sql_updata) conn.commit() cursor.close() conn.close() ---------------------------------------------------------------------------- 5:查詢前三行數(shù)據(jù) import pymssql conn = pymssql.connect('.','sa','123456','PY_DATA',charset='cp936') if conn: print("True") cursor = conn.cursor() sql_select = "Select Top 3 * From Student" cursor.execute(sql_select) row =1 while row: row = cursor.fetchone() print(row) cursor.close() conn.close() ---------------------------------------------------------------------------- 6:插入一列屬性 import pymssql conn = pymssql.connect('.','sa','123456','School') cursor = conn.cursor() conn.autocommit(True) sql_insertbase = "Alter table Student_3 add idname int Null" cursor.execute(sql_insertbase) cursor.close() conn.close()
以上就是Python連接SQL server數(shù)據(jù)庫詳細流程的詳細內(nèi)容,更多關(guān)于Python連接SQL server的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python3中http協(xié)議提供文件服務(wù)器功能詳解
http協(xié)議是互聯(lián)網(wǎng)的通用基礎(chǔ)協(xié)議,也可以利用其來開發(fā)文件服務(wù)器,給客戶提供文件瀏覽,查看,下載,上傳等功能,這篇文章主要介紹了python3中http協(xié)議提供文件服務(wù)器功能,需要的朋友可以參考下2023-06-06Keras預(yù)訓(xùn)練的ImageNet模型實現(xiàn)分類操作
這篇文章主要介紹了Keras預(yù)訓(xùn)練的ImageNet模型實現(xiàn)分類操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07Python設(shè)計模式中的結(jié)構(gòu)型橋接模式
這篇文章主要介紹了Python設(shè)計模式中的結(jié)構(gòu)型橋接模式,橋接模式即Bridge?Pattern,將抽象部分與它的實現(xiàn)部分分離,使它們都可以獨立地變化.下面來看看文章的詳細內(nèi)容介紹吧2022-02-02使用pycharm創(chuàng)建Django項目失敗的解決方案
使用PyCharm創(chuàng)建Django項目時遇到無法運行的問題,可以檢查Python的安裝路徑設(shè)置是否正確,在PyCharm的設(shè)置中找到項目解釋器的位置,確保路徑正確,如果不確定Python的安裝位置,可以在命令提示符中使用“where Python”命令查詢2024-09-09