Python連接SQL?server數(shù)據(jù)庫并進行簡單查詢的操作詳解
前言
學習Python 連接 數(shù)據(jù)庫
解決問題:
1:如何連接數(shù)據(jù)庫
2:如何進行簡單查詢
3:如何將查詢中的中文亂碼給修復
4:如何進行插入,更新,刪除
一、如何連接數(shù)據(jù)庫?
#pip install pymssql 先安裝
import pymssql #導入模塊
connect = pymssql.connect('(local)','sa','123456','School')
#connect = pymssql.connect('服務器名稱', '用戶名', '密碼', '庫名') # 建立連接
if connect:
print("連接成功")
#輸出
連接成功
二、如何進行簡單查詢
cursor = connect.cursor()#創(chuàng)建一個游標對象python里的sql語句都要通過cursor來執(zhí)行
sql="select * from Student" #一個簡單的sql查詢語句
cursor.execute(sql)#執(zhí)行sql語句
row = cursor.fetchone() #用fetchone 獲取游標的數(shù)據(jù),如果是首次就定位首行
while row: # 循環(huán)讀取所有結果
print(row)
row = cursor.fetchone()#取下一個內容
cursor.close()
connect.close()
#結果出現(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')
三、如何將查詢中的中文亂碼給修復
方法一
主要在pymssql.connect 中添加charset = ‘cp936’
原因:因為字符串字段類型為:varchar,造成讀取數(shù)據(jù)亂碼。
import pymssql #導入模塊
connect = pymssql.connect('(local)','sa','123456','School',charset='cp936') #connect = pymssql.connect('服務器名稱', '用戶名', '密碼', '庫名') # 建立連接
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()
#結果
<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’),也不行??!
方法二
更通用全部
直接用sql語句將varchar轉為nvarchar類型,不再需要指定charset了,就沒問題了(注意轉換列名稱起別名),直接寫sql語句如下
select convert(nvarchar(50),table_colum) as 'nvarchar_colum' from mytable where convert(nvarchar(50),table_colum) = '魏本明' 就是將需要轉換的列(如,varchar),轉換為nvarchar,也可以完成
例如:
import pymssql #導入模塊
connect = pymssql.connect('(local)','sa','123456','School') #connect = pymssql.connect('服務器名稱', '用戶名', '密碼', '庫名') # 建立連接
if connect:
print(connect)
print("連接成功")
cursor = connect.cursor()#創(chuàng)建一個游標對象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 獲取游標的數(shù)據(jù),如果是首次就定位首行
print(row)
while row: # 循環(huán)讀取所有結果
print("id=%s,Name=%s,Sex=%s" % (row[0], row[1], row[2])) # 輸出結果
row = cursor.fetchone()#取下一個內容
cursor.close()
connect.close()
結果:
<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字面意思就是 投入
然后更改表的結構就不用了,因為他們內置了commit
create,drop,alter等修改表結構的,就不需要commit,因為內部隱藏了commit
不行的時候加上conn.autocommit(True)
推薦先在SQL中查看語句有沒有語法錯誤在放回來運行,能解決你50%以上的報錯
總結
我下面進行一個小項目全部都在python中完成
目標:
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)#是修改表的結構都要有嗎?
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ù)庫詳細流程的詳細內容,更多關于Python連接SQL server的資料請關注腳本之家其它相關文章!
相關文章
python3中http協(xié)議提供文件服務器功能詳解
http協(xié)議是互聯(lián)網(wǎng)的通用基礎協(xié)議,也可以利用其來開發(fā)文件服務器,給客戶提供文件瀏覽,查看,下載,上傳等功能,這篇文章主要介紹了python3中http協(xié)議提供文件服務器功能,需要的朋友可以參考下2023-06-06
Keras預訓練的ImageNet模型實現(xiàn)分類操作
這篇文章主要介紹了Keras預訓練的ImageNet模型實現(xiàn)分類操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
使用pycharm創(chuàng)建Django項目失敗的解決方案
使用PyCharm創(chuàng)建Django項目時遇到無法運行的問題,可以檢查Python的安裝路徑設置是否正確,在PyCharm的設置中找到項目解釋器的位置,確保路徑正確,如果不確定Python的安裝位置,可以在命令提示符中使用“where Python”命令查詢2024-09-09

