如何使用Pycharm連接SQL Sever(詳細教程)
目錄
- 步驟一:先檢測自己的SQL Sever有沒有打開密碼功能
- 步驟二:建立一個空數據庫,并且建立一個專屬用戶
- 步驟三:打開1433 端口
- 步驟四:在pycharm中測試
- 步驟五:服務器含有漢語的亂碼錯誤修正
如何使用pycharm連接SQL Sever:
應該是所有的錯誤都經歷了(不得不說挺崩潰的)
Tip:不要跳步操作。
步驟一:先檢測自己的SQL Sever有沒有打開密碼功能
如果沒有打開密碼功能僅新建登錄名會出現:
標題: 連接到服務器 ------------------------------ 無法連接到 LAPTOP-40O6HVDS。 ------------------------------ 其他信息: 已成功與服務器建立連接,但是在登錄過程中發生錯誤。 (provider: Shared Memory Provider, error: 0 - 管道的另一端上無任何進程。) (Microsoft SQL Server,錯誤: 233)
打開密碼功能具體實現操作如下:
我的SQL Sever下載的時候就是用的電腦身份驗證登錄的,需要設置密碼登錄:
找到對象資源管理器的第一個,單擊鼠標右鍵后出現以下頁面:
點擊屬性,進入頁面后點擊安全性,會出現:
服務器身份驗證選中第二個(SQL Sever 和Window 身份驗證)模式之后點擊確定。
步驟二:建立一個空數據庫,并且建立一個專屬用戶
建立專屬用戶和空數據庫的原因是防止以后對數據庫操作失誤時影響到其它的數據庫。
首先需要點擊新建查詢并且執行以下操作:
create database soft2104
執行會出現一個soft2104的新數據庫(soft2104我的數據庫名稱,后續需要放在pycharm里)
如果你覺得數據庫難聽可以執行如下操作進行刪除數據庫:(不過需要新建一個數據庫)
use master --刪數據庫drop database soft2104 --刪數據庫
建立好數據庫后雙擊安全性:
雙擊登錄名后點擊鼠標右鍵,點擊新建登錄名:
編輯一個登錄名(yunmengze這個是我的用戶名,后續需要放在pycharm里)
接下來點擊SQL Sever 身份驗證輸入密碼,隨便起一個密碼,忘了可以再更改。在這里我就用123456代替(123456是我的密碼,后續需要放在pycharm里)。
接下來把強制實施密碼策略的對號給點掉(不然后來會遇到各種登錄問題)
變成這樣:
點擊用戶映射,將你的數據庫打勾:
將下邊的db_ower對勾選中:
點擊確定,之后進行驗證:
點擊電腦和叉的標志退出服務器斷開連接,之后點擊電腦和綠線的標志連接服務器
點擊SQL Sever 身份驗證輸入賬號密碼如果成功的連接,就會進入數據庫,你只能對你用戶對應下的數據庫進行各種操作:
如果你的SQL Sever沒有打開密碼功能就會出現以下提示:
標題: 連接到服務器 ------------------------------ 無法連接到 LAPTOP-40O6HVDS。 ------------------------------ 其他信息: 已成功與服務器建立連接,但是在登錄過程中發生錯誤。 (provider: Shared Memory Provider, error: 0 - 管道的另一端上無任何進程。) (Microsoft SQL Server,錯誤: 233)
步驟三:打開1433 端口
首先需要檢測自身的 1433 端口是否打開(一般默認的都是關閉的需要自己打開)
1433應該是電腦的一個端口,可以鏈接電腦的(其實不需要知道是什么)
點擊:win和R,輸入cmd點擊回車出現如下界面:
輸入telnet localhost 1433并點擊回車
一般會出現一下錯誤:
'telnet' 不是內部或外部命令,也不是可運行的程序
解決辦法:
點擊:win和R,輸入control點擊回車出現如下界面:
點擊程序(不要點到卸載程序)
點擊啟動或關閉Windows 功能
將Telnet客戶端對號選中,點擊確定,會經過大概1分鐘左右的等待頁面
再次重復win和R,輸入cmd點擊,輸入telnet localhost 1433并點擊回車出現以下錯誤:
正在連接localhost...無法打開到主機的連接。 在端口 1433: 連接失敗
(你已經成功了一半了)
打開以下程序:
找不到就在搜索框里輸入sql
打開之后會出現以下界面:
禁用所有上述出現的程序(必須先這么做)
點擊SQL Sever網絡配置,然后點擊MSSQLSEVER的協議:
雙擊這個TCP/IP,進入之后將TCP/IP的啟用改為 是
點擊IP地址:
將IP1、IP2的啟用改為是,觀察TCP端口是不是1433。(一共改兩個)
往下滑出現IPAll,觀察其TCP端口是不是1433,最后別忘記點應用(不是點擊確定)。
經過上述操作后重啟電腦,重新打開該軟件,然后再將下邊的東西改成啟動,SQL Sever代理啟動失敗與否不會影響SQL Sever的使用。:
點擊:win和R,輸入cmd點擊回車,并在其中輸入telnet localhost 1433 當頁面跳轉到以下頁面則說明你的1433配置成功:
步驟四:在pycharm中測試
經過以上操作之后打開pycharm在終端輸入,安裝pycharm和SQL Sever鏈接的庫:
pip install pymssql
pymssql庫安裝成功后建立新的py文件并輸入以下代碼并執行:
import pymssql connect = pymssql.connect(host="localhost",server="LAPTOP-40O6HVDS", port="1433",user="yunmengze", password= "123456", database="soft2104") # host不要改其參數,server改成你的服務器名, port不要改其參數,user你的用戶名, password你的密碼, database你的數據庫名if connect:
'yunmengze', '123456', 'soft2104'是上述步驟二操作中設置的。
LAPTOP-40O6HVDS是我的服務器名稱,在這里你需要打開你的SQL Sever登錄界面進行查看。
如果上述的,代碼執行失敗,失敗示例如下(服務器名字是漢語的):
請用以下代碼調試,如果這樣能夠連接成功請利用步驟五修改服務器名稱:
import pymssqlconnect = pymssql.connect(host="localhost",server="LAPTOP-40O6HVDS", port="1433",user="yunmengze", password= "123456", database="soft2104",charset="GBK") # host不要改其參數,server改成你的服務器名, port不要改其參數,user你的用戶名, password你的密碼, database你的數據庫名,charset不要改變其參數。if connect: print("數據庫連接成功")else: print("連接失敗")
如果你的運行結果是:數據庫連接成功
恭喜你的pycharm和SQL Sever鏈接成功。
(剩下的就是學習如何以pycharm為媒介來操作SQL Sever了)
SQL Sever在pycharm中的導入數據需要修改用戶權限,如果你經過一番波折連接成功建議您往下看……
步驟五:服務器含有漢語的亂碼錯誤修正
下面根據我經歷的一下問題做一些補充:
如果你的服務器沒有漢語請跳過該步驟。
如果你的服務器是漢語的,登錄的時候需要charset="GBK",但是對后續的在數據增加時會因為GBK有亂碼的風險,需要做下列一下修改:
點擊此電腦的屬性
進入后點擊重命名這臺電腦
重命名后重啟電腦(為了教程我也是重命名了,………………)
重啟電腦后再打開sql sever點擊服務器,就可以對服務器進行選擇,選擇你命名的電腦名稱的服務器,嘗試一下就會發現也可以進入。
下面教程一種更改服務器名稱在pycharm來隱藏真實的服務器名稱的方法:
修改服務器的名稱(相當于加一個小名),下列操作是在sql sever里新建查詢中執行的,需要根據提示修改其中的oldservername和newservername:
/*select @@SERVERNAME--查詢當前服務器實際名稱,在后續操作過程中不會影響該值,服務器的大名select SERVERPROPERTY("ServerName")--查看所有定義的服務器*/sp_helpserver --可以查看服務器的小名--根據查出的小名進行修改oldservername的值sp_dropserver "oldservername" --newservername是更改后的名稱sp_addserver "newservername","local" --將更改后的名稱應用newservername是你需要改的sp_serveroption "newservername", "data access", "on"--oldservername原來的服務器名,newservername新的服務器名
修改后,用新的服務器名稱也能進入服務器,注意不要有漢語
實際服務器如果有漢語請通過上一個方法修改服務器名稱先對真實服務器名稱修改,增加昵稱的方式不會更改原來服務器中包含漢語使服務器無法進入或亂碼的錯誤。
SQL Sever在pycharm中的導入數據,增,刪,查操作
如果你想大量導入數據(導入數據前需要在sql sever里建立好表格),使用bulk函數,例如:
bulk insert soft2110 --txt插入到soft2110表格中from "d:2104.txt" --txt在D盤而且需要其編碼為ANSI才行with(fieldterminator = "\t",rowterminator = "\n") --\t是每行以空格分割,\n是根據換行將表格導入。
需要更改你的登錄名的權限,打開方式如下:
雙擊安全性;
雙擊登錄名;
找到你的登錄名(我的是yunmengze),雙擊服務器角色,將服務器角色的sysadmin選中:
在sql sever里建立表格時需要以下注意:
在聲明表格變量時不要用nvarchar,varchar,因為這兩個聲名的字符串編碼是GBK編碼,如果在pycharm里插入數據時會因為pycharm執行過程使用utf-8編碼導致插入后亂碼。所以在聲明table時字符串盡量用nchar(20),這種方式是utf-8編碼,其中的數字20是字符串的大小,一個漢字大概能占用2個位置,所以聲明的大小不能太大,更不能過小。
示例如下:(先別粘,后續有總的,先看懂是怎么一回事)
use soft2104create table soft2110(xh int,dp nchar(20),pr nchar(20),id nchar(30),nm nchar(20))
如果你之前聲明過soft2110表格但是使用了GBK編碼的nvarchar,varchar,你可以通過以下代碼刪除表格soft2110:
drop table soft2110
以下示例是完整的操作示例(已經給你的用戶打開權限,復制完整代碼的時間到了):
use soft2104drop table soft2110create table soft2110(xh int,dp nchar(20),pr nchar(20),id nchar(30),nm nchar(20)) bulk insert soft2110 --txt textfrom "d:2104.txt"with(fieldterminator = "\t",rowterminator = "\n")--\t是空格delete from soft2110 where xh=71
示例需要在D盤建立2104.txt文件,示例數據是:
1 軟件學院 軟件2204 31212121212 云夢澤
2 軟件學院 軟件2204 31313131313 上林賦
注意,保存后需要另存為D盤的2104.txt文件進行替換,編碼變成ANSI
增刪改查主要用的是sql sever里的execute函數示例如下:
在你的連接成功后的pycharm里加入以下代碼,實現對上述的表格實現查找:
cur = connect.cursor()sqlstr = "select * from soft2110"cur.execute(sqlstr)data = cur.fetchall()cur.close()for i in range(len(data)): for t in range(len(data[i])):print(str(data[i][t]).strip(), end=" ") print("\r")connect.close()
就會得到以下輸出,注意執行之后關閉了游標和連接(如果是帶循環的操作可以將connect.close()放在退出循環操作執行,最后再斷開與sql sever的連接;斷開游標: cur.close() 游標用的時候打開,不用的時候隨即關閉):
1 軟件學院 軟件2204 31212121212 云夢澤
2 軟件學院 軟件2204 31313131313 上林賦
注意其中data是列表里套用元組的形式,以上兩個for循環是打開列表和元組的過程:
[(1,軟件學院,軟件2204,31212121212,云夢澤),(2,軟件學院,軟件2204,31313131313,上林賦)]
對數據查詢用的是:
cur.execute(sqlstr)
data = cur.fetchall()
對數據增,刪用的是:
cur.execute(sqlstr)
connect.commit()
示例如下:
print("輸入案例:“醫學院 臨床2204 349849848 岳陽城”")add = input("請輸入‘學院 專業 學號 姓名":")try: cur = connect.cursor() sqlstr = "select * from soft2110" cur.execute(sqlstr) data = cur.fetchall() sqlstr = f"select * from soft2110 where id = "{add[2]}"" cur.execute(sqlstr) acc = cur.fetchall() if acc:print("學號重復,請重新插入")return try:sqlstr =f"insert into soft2110 values ({len(data) + 1},"{add[0]}","{add[1]}","{add[2]}","{add[3]}")"# print(sqlstr)cur.execute(sqlstr)connect.commit()print("插入成功") except:print("插入失敗請重試") cur.close() connect.close()except: print("輸入錯誤")
Tip:
sqlstr = f"select * from soft2110 where id = "{add[2]}""
f 和 " "和 { } 結合是將 { } 內的數據帶入進字符串中,達到鏈接的作用,不加 f 中 { } 內的add[2]數據沒辦法讀取到字符串中,達到運算拼接的效果。
例如:
print(f"輸出結果為{2*3}")
打印:輸出結果為6
print("輸出結果為{2*3}")
打?。狠敵鼋Y果為{2*3}
刪除操作(思路如下):
de = input("請輸入刪除的學號:")
sqlstr = f"delete from soft2110 where id = "{de}""
完整的刪除代碼如下:
def delete(connect, de): cur = connect.cursor() sqlstr = f"select * from soft2110 where id = "{de}"" cur.execute(sqlstr) acc = cur.fetchall() if acc:sqlstr = f"delete from soft2110 where id = "{de}""cur.execute(sqlstr)connect.commit()cur.close()print("刪除成功") else:print("學號不存在")cur.close() returnde = input("請輸入刪除的學號:")try: delete(connect, de)except Exception as e: print(f"Error: {e}")
具體的實現方式是,通過 execute( ) 函數將數據庫中的操作移動到python中,先對數據庫的學號進行預判斷,如果沒有這個學號返回學號不存在的輸出,如果學號存在則返回刪除成功,如果發現其他錯誤則返回刪除失敗用try函數增加了函數的容錯性,通過將except函數,做到輸出錯誤的目的,通過返回的錯誤類型再進行代碼調試。
到此這篇關于如何使用Pycharm連接SQL Sever(詳細教程)的文章就介紹到這了,更多相關Pycharm連接SQL Sever內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!
