国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python 通過pymssql訪問查詢操作 SQL Server數(shù)據(jù)庫

這篇具有很好參考價值的文章主要介紹了Python 通過pymssql訪問查詢操作 SQL Server數(shù)據(jù)庫。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

在企業(yè)應(yīng)用開發(fā)中,經(jīng)常用到應(yīng)用程序訪問數(shù)據(jù)庫的開發(fā)模式,中小企業(yè)使用的數(shù)據(jù)庫中,以ms SQL Server居多。本文就以一個簡單的實(shí)例模型,簡單介紹一下python訪問ms sql sever數(shù)據(jù)庫的方法。

一、數(shù)據(jù)庫模型

本文中以下面的本地SQL Server數(shù)據(jù)庫為例進(jìn)行數(shù)據(jù)庫連接,數(shù)據(jù)表的查詢、增加、刪除、修改等操作。
主機(jī)地址:localhost(我的是本地服務(wù)器,使用localhost,在linx系統(tǒng)下測試時使用了遠(yuǎn)程的數(shù)據(jù)庫)
端口:默認(rèn)的1433
用戶名:sa
密碼:sa1234
數(shù)據(jù)庫名:myTestDb
數(shù)據(jù)庫myTestDb中預(yù)設(shè)一個表tab_product,表結(jié)構(gòu)如下:
pymssql,python,數(shù)據(jù)庫,python,qt5,sqlserver

Tab_product中已經(jīng)包括以下5行試驗(yàn)數(shù)據(jù):
pymssql,python,數(shù)據(jù)庫,python,qt5,sqlserver

二、pymssql庫及簡介

python訪問ms SQL Server 需要用到Pymssql庫,如沒有安裝,可以在命令行模式下輸入:

pip install pymssql

進(jìn)行下載安裝。
1、使用pymssql創(chuàng)建數(shù)據(jù)連接,需要將SQL Server服務(wù)器的參數(shù)傳給pymssql的connect方法,成功后建立連接。如下:
pymssql,python,數(shù)據(jù)庫,python,qt5,sqlserver

2、查詢數(shù)據(jù)方法:查詢數(shù)據(jù)使用標(biāo)準(zhǔn)的SQL查詢語句為作cursor對象execute方法的參數(shù),注意返回值results為一個數(shù)據(jù)集合,result為集合中的每一行,res為每一行中的相關(guān)字段。
pymssql,python,數(shù)據(jù)庫,python,qt5,sqlserver

3、數(shù)據(jù)操作:包括數(shù)據(jù)的增加、刪除、修改等。也是使用標(biāo)準(zhǔn)的SQL語句。如下為增加一行數(shù)據(jù):
pymssql,python,數(shù)據(jù)庫,python,qt5,sqlserver

注意所有操作完成后,需要使用conn.close()關(guān)閉和數(shù)據(jù)庫的連接。

三、實(shí)例演示

演示界面使用pyqt5開發(fā)。界面如下:
pymssql,python,數(shù)據(jù)庫,python,qt5,sqlserver

界面上部為數(shù)據(jù)連接的主要參數(shù),包括主機(jī)名,端口,數(shù)據(jù)庫名稱,用戶名和密碼等參數(shù),設(shè)置完成后點(diǎn)擊連接,連接成功后。才能進(jìn)行下面的其它操作。
界面中部為兩個文本框,用于輸入SQL數(shù)據(jù)查詢命令和SQL操作執(zhí)行命令(如刪除、新增、更新等)
界面下部為一個多行文本框,用于顯示、記錄查詢結(jié)果或記錄。

三、完整代碼
實(shí)現(xiàn)的完整代碼如下:代碼中的注釋比較清楚,不再贅述。
需要說明的一點(diǎn)就是關(guān)于python和SQL Server 使用的字符集不同,處理不當(dāng)會出現(xiàn)中文亂碼的情況,這個在需要注意和進(jìn)行轉(zhuǎn)換的代碼中注釋的非常清楚。

#encoding:utf8

'''
code writing:hnkkfan
本代碼用于演示pyqt5訪問查詢和操作sql sever數(shù)據(jù)庫
布局采用一個盒式布局,一個垂直布局里面包括五個水平布局
第一行為連接參數(shù),包括主機(jī)名(地址),端口、數(shù)據(jù)庫名
第二行為:用戶名和密碼,再加一個連接按鈕
第三行為一個文本框,用于輸入數(shù)據(jù)查詢命令,后面跟一個查詢按詢
第四行為一個文本框,用于輸入數(shù)據(jù)執(zhí)行命令,后面跟一個執(zhí)行按詢
第五行為一個多行文本框,用于顯示執(zhí)行效果和錯誤信息
'''
import sys
from PyQt5.Qt import (QApplication, QWidget, QPushButton,QThread,pyqtSignal)
import pymssql
from PyQt5.QtWidgets import QTextEdit, QHBoxLayout, QVBoxLayout, QLineEdit, QLabel
from PyQt5.QtWidgets import QMessageBox




class MyWin(QWidget):
    conn=False
    def __init__(self):
        super().__init__()

        self.btn_conn = QPushButton('連接', self)#定義一個按鈕
        self.btn_conn.clicked.connect(self.btnClick_conn)  # 給按鈕綁定連接函數(shù)

        hbox_line1 = QHBoxLayout()
        hbox_line1.addWidget(QLabel("服務(wù)器主機(jī)名(IP地址):"))
        self.txt_host = QLineEdit("localhost")#數(shù)據(jù)庫服務(wù)器主機(jī)本地為localhost

        hbox_line1.addWidget(self.txt_host)
        hbox_line1.addWidget(QLabel("端口:"))
        self.txt_port = QLineEdit("1433")#數(shù)據(jù)庫服務(wù)器端口,默認(rèn)為1433
        self.txt_port.setMaximumWidth(100)
        self.txt_port.setMinimumWidth(100)
        hbox_line1.addWidget(self.txt_port)

        hbox_line2 = QHBoxLayout()
        hbox_line2.addWidget(QLabel("數(shù)據(jù)庫:"))
        self.txt_dbname = QLineEdit("myTestDb")#數(shù)據(jù)庫名
        hbox_line2.addWidget(self.txt_dbname)
        hbox_line2.addWidget(QLabel("用戶名:"))
        self.txt_user = QLineEdit("sa")#連接數(shù)據(jù)庫的用戶名
        self.txt_user.setMaximumWidth(160)
        self.txt_user.setMinimumWidth(160)

        hbox_line2.addWidget(self.txt_user)
        hbox_line2.addWidget(QLabel("密碼:"))
        self.txt_pass = QLineEdit("SQL2008r2")#連接數(shù)據(jù)庫的用戶密碼
        self.txt_pass.setMaximumWidth(160)
        self.txt_pass.setMinimumWidth(160)
        self.txt_pass.setEchoMode(QLineEdit.Password)#設(shè)置密碼內(nèi)容用點(diǎn)代替
        hbox_line2.addWidget(self.txt_pass)
        hbox_line2.addWidget(self.btn_conn)

        hbox_line3=QHBoxLayout()
        hbox_line3.addWidget(QLabel("查詢語句:"))
        self.txt_selelct=QLineEdit("SELECT * FROM tab_product")#示例的查詢語句
        self.btn_select = QPushButton('查詢', self)  # 查詢按鈕
        self.btn_select.clicked.connect(self.btnClick_select)  # 給查詢綁定函數(shù)
        self.btn_select.setEnabled(False)
        hbox_line3.addWidget(self.txt_selelct)
        hbox_line3.addWidget(self.btn_select)

        hbox_line4 = QHBoxLayout()
        hbox_line4.addWidget(QLabel("操作語句:"))
        #示例的操作語句,可以使用標(biāo)準(zhǔn)的SLQ 刪除、更新及插入語句
        self.txt_do = QLineEdit("update tab_product set p_name='' where p_id=")
        self.btn_do = QPushButton('執(zhí)行', self)  # 執(zhí)行按鈕
        self.btn_do.clicked.connect(self.btnClick_do)  # 給執(zhí)行按鈕綁定函數(shù)
        self.btn_do.setEnabled(False)
        hbox_line4.addWidget(self.txt_do)
        hbox_line4.addWidget(self.btn_do)

        hbox_line5=QHBoxLayout()
        self.txt_PressInfo = QTextEdit()#定義一個顯示操作信息的多行文本框
        hbox_line5.addWidget(self.txt_PressInfo)

        vbox = QVBoxLayout()
        vbox.addLayout(hbox_line1)
        vbox.addLayout(hbox_line2)
        vbox.addLayout(hbox_line3)
        vbox.addLayout(hbox_line4)
        vbox.addLayout(hbox_line5)

        self.setLayout(vbox)  # 把垂直布局器添加到窗口

    def btnClick_conn(self):#連接按鈕的點(diǎn)擊事件
        #建立與數(shù)據(jù)庫的連接,參數(shù)分別為主機(jī)名,端口,用戶名,用戶密碼和連接的數(shù)據(jù)庫
        # 注意:這里字符集使用的python文本常用的utf8(也可不加,因?yàn)槟J(rèn)就是utf8)
        try:
            self.conn = pymssql.connect(host=self.txt_host.text(),
                                    port=self.txt_port.text(),
                                    user=self.txt_user.text(),
                                    password=self.txt_pass.text(),
                                    database=self.txt_dbname.text(),
                                    charset='utf8')

            self.btn_select.setEnabled(True)
            self.btn_do.setEnabled(True)
            self.txt_PressInfo.append("數(shù)據(jù)庫已經(jīng)連接!")

        except:#如不能連接上則讓查詢和執(zhí)行按鈕不可以用并進(jìn)行提示
            self.txt_PressInfo.append("數(shù)據(jù)庫連接失??!")
    def btnClick_select(self):#查詢按鈕的點(diǎn)擊事件
        cursor=self.conn.cursor()#建立游標(biāo)
        try:#用一個try來進(jìn)行查詢,成功則返回查詢結(jié)果,不成功則提示查詢失敗
            cursor.execute(self.txt_selelct.text())
            results=cursor.fetchall()
            for result in results:#對數(shù)據(jù)集合中的每行進(jìn)行操作
                showTxt=""
                for col in range(len(result)):#對每行中每列數(shù)據(jù)進(jìn)行操作
                    # 因?yàn)镾QL Server返回的是GBK字符串,在uft8下中文會出現(xiàn)亂碼,
                    # 通過.encode('latin-1').decode('gbk')轉(zhuǎn)碼解決問題
                    # strip()用于清除字符串前后的空格,
                    # ljust()用于將所有字段長度固定(不足時補(bǔ)齊)
                    showTxt=showTxt+str(result[col]).strip().ljust(20).encode('latin-1').decode('gbk')
                self.txt_PressInfo.append(showTxt)#把本行查詢結(jié)果追加到多行文本框中顯示
        except:
            self.txt_PressInfo.append("查詢數(shù)據(jù)記錄時發(fā)生錯誤!")

    def btnClick_do(self):#數(shù)據(jù)操作按鈕的點(diǎn)擊事件
        cursor = self.conn.cursor()
        try:#通過一個try對數(shù)據(jù)進(jìn)行操作,成功則提示操作成功,否則提示操作錯誤。
            sqldo=self.txt_do.text()
            cursor.execute(sqldo)
            self.conn.commit()
            self.txt_PressInfo.append("執(zhí)行數(shù)據(jù)操作完成!")

        except:
            self.txt_PressInfo.append("執(zhí)行數(shù)據(jù)操作時發(fā)生錯誤!")
            
    #定義一個關(guān)閉窗口時的對話框,如確定退出,則關(guān)閉conn的連接。
    def closeEvent(self, event):  # 關(guān)閉窗口觸發(fā)以下事件
        a = QMessageBox.question(self, '退出', '你確定要退出嗎?', QMessageBox.Yes | QMessageBox.No,
                                 QMessageBox.No)  # "退出"代表的是彈出框的標(biāo)題,"你確認(rèn)退出.."表示彈出框的內(nèi)容
        if a == QMessageBox.Yes:
            if self.conn:
                self.conn.close()
            event.accept()  # 接受關(guān)閉事件
        else:
            event.ignore()  # 忽略關(guān)閉事件



if __name__ == "__main__":
    app = QApplication(sys.argv)
    myshow = MyWin()
    myshow.setWindowTitle("Pyqt5連接SQL Server 演示")
    myshow.setMinimumHeight(640)
    myshow.setMinimumWidth(720)
    myshow.show()
    sys.exit(app.exec_())

四、運(yùn)行效果:

1、數(shù)據(jù)庫連接成功時:
pymssql,python,數(shù)據(jù)庫,python,qt5,sqlserver

2、數(shù)據(jù)庫連接失敗時:
pymssql,python,數(shù)據(jù)庫,python,qt5,sqlserver

3、查詢數(shù)據(jù)成功時:
pymssql,python,數(shù)據(jù)庫,python,qt5,sqlserver

4、查詢數(shù)據(jù)失敗時:
pymssql,python,數(shù)據(jù)庫,python,qt5,sqlserver

5、執(zhí)行數(shù)據(jù)操作成功時:
pymssql,python,數(shù)據(jù)庫,python,qt5,sqlserver

6、執(zhí)行數(shù)據(jù)操作失敗時:

pymssql,python,數(shù)據(jù)庫,python,qt5,sqlserver

7 、關(guān)閉窗口時提示:
pymssql,python,數(shù)據(jù)庫,python,qt5,sqlserver

五、測試環(huán)境:
這段代碼在windows和linux下都測試通過。
1、windows下:windows11家庭版+python3.11.1+PyCharm2022.3.2(Community Edition)
2、linux下:deepin os 20.8+python 3.7.1+PyCharm Community 2022.3。(數(shù)據(jù)庫采用公司服務(wù)器上遠(yuǎn)程的SQL Server進(jìn)行測試)。文章來源地址http://www.zghlxwxcb.cn/news/detail-690472.html

到了這里,關(guān)于Python 通過pymssql訪問查詢操作 SQL Server數(shù)據(jù)庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • python連接并簡單操作SQL server數(shù)據(jù)庫

    python連接并簡單操作SQL server數(shù)據(jù)庫

    環(huán)境: pycharm 、SQLserver版本2019 1.首先,在pycharm中點(diǎn)擊File,找到setting——project:***,點(diǎn)擊”+“,引入pymssql庫 2.編寫代碼連接數(shù)據(jù)庫,并對數(shù)據(jù)庫進(jìn)行查詢等簡單操作(此處僅展示查詢) ?3.在sql server中由于之前使用windows驗(yàn)證模式進(jìn)入數(shù)據(jù)庫管理器,所以要身份驗(yàn)證修改,

    2024年02月08日
    瀏覽(92)
  • 什么是T-SQL編程?T-SQL是Transact-SQL的縮寫,是一種擴(kuò)展了SQL(結(jié)構(gòu)化查詢語言)的編程語言,用于Microsoft SQL Server數(shù)據(jù)庫管理系統(tǒng)中的數(shù)據(jù)管理和操作。T-

    什么是T-SQL編程? T-SQL是Transact-SQL的縮寫,是一種 擴(kuò)展了SQL(結(jié)構(gòu)化查詢語言) 的編程語言,用于Microsoft?SQL?Server數(shù)據(jù)庫管理系統(tǒng)中的數(shù)據(jù)管理和操作。T-SQL支持創(chuàng)建 存儲過程、觸發(fā)器、函數(shù) 等高級特性,能夠更加靈活地進(jìn)行數(shù)據(jù)操作和處理。基本的T-SQL語法與標(biāo)準(zhǔn)SQL很相

    2024年01月21日
    瀏覽(100)
  • SQL Server數(shù)據(jù)庫 -- 表的基礎(chǔ)查詢

    SQL Server數(shù)據(jù)庫 -- 表的基礎(chǔ)查詢

    一、單表查詢基本結(jié)構(gòu) 二、單表查詢結(jié)構(gòu)語法 select 聚合函數(shù) where 模糊查詢 order by group by having 三、多表查詢基本結(jié)構(gòu) 四、多表查詢結(jié)構(gòu)語法 內(nèi)連接 自連接 外連接 五、總結(jié) ? ? ? ? 學(xué)習(xí)了數(shù)據(jù)庫,在以后公司等地方,你可能不會用到創(chuàng)建數(shù)據(jù)庫或者表格,但是你一定會使

    2024年02月11日
    瀏覽(101)
  • SQL Server數(shù)據(jù)庫 -- 表的高級查詢

    SQL Server數(shù)據(jù)庫 -- 表的高級查詢

    ? 一、子查詢 嵌套子查詢 相關(guān)子查詢 二、查詢運(yùn)算 并運(yùn)算union 交運(yùn)算intersect 差運(yùn)算except 三、函數(shù)的使用 if語句 while語句 case語句 四、總結(jié) 高級子查詢是對查詢更靈活的運(yùn)用,學(xué)會了高級查詢將對數(shù)據(jù)庫使用有很大的幫助。 ? ? ? 在SQL語言中,一個select-from-where語句稱為一

    2024年02月13日
    瀏覽(91)
  • SQL server數(shù)據(jù)庫端口訪問法

    SQL server數(shù)據(jù)庫端口訪問法

    最近數(shù)據(jù)庫連接,也是無意中發(fā)現(xiàn)了這個問題,數(shù)據(jù)庫可根據(jù)端口來連接 網(wǎng)址:yii666.com 我用的是sql2014測試的,在安裝其他程序是默認(rèn)安裝了sql(sql的tcp/ip端口為xxx),服務(wù)也不相同,但是由于比較不全,我又重裝了sql2014的完整安裝包,默認(rèn)安裝的端口是1433,所以就導(dǎo)致了數(shù)據(jù)

    2024年02月05日
    瀏覽(90)
  • sql server 數(shù)據(jù)庫訪問端口配置

    sql server 數(shù)據(jù)庫訪問端口配置

    1、選擇sql server 配置管理器 2、選擇SQL Server 網(wǎng)絡(luò)配置- MSSQLSERVER 的協(xié)議 - 右鍵TCP/IP屬性 3、選擇IP地址最下面的IPALL 下面的TCP端口 這個端口就是我們訪問數(shù)據(jù)庫設(shè)置的訪問端口,默認(rèn)端口為1433,如果在不更改的情況下,本地根據(jù)IP訪問時可不設(shè)置端口號,如果更改了,則在訪

    2024年02月11日
    瀏覽(95)
  • 通過Java連接Sql Server數(shù)據(jù)庫

    通過Java連接Sql Server數(shù)據(jù)庫

    JDBC是Java DateBase Connectivity的簡寫,翻譯過來就是java連接數(shù)據(jù)庫,或者更通俗地說就是java語言操作數(shù)據(jù)庫。JDBC的本質(zhì)其實(shí)是官方定義的一套操作所有關(guān)系型數(shù)據(jù)庫的規(guī)則,也就是接口。 微軟官方j(luò)dbc下載地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=11774 下載之后解壓到相

    2024年01月17日
    瀏覽(96)
  • [SQL Server]數(shù)據(jù)庫入門之多表查詢

    [SQL Server]數(shù)據(jù)庫入門之多表查詢

    ?? 博客主頁:博主鏈接 ?? 本文由 M malloc 原創(chuàng),首發(fā)于 CSDN?? ?? 學(xué)習(xí)專欄推薦:LeetCode刷題集! ?? 歡迎點(diǎn)贊 ?? 收藏 ?留言 ?? 如有錯誤敬請指正! ?? 未來很長,值得我們?nèi)Ρ几案篮玫纳? ------------------??分割線??------------------------- —————————

    2024年02月08日
    瀏覽(88)
  • 數(shù)據(jù)庫SQL Server實(shí)驗(yàn)報告 之 SQL語言進(jìn)行簡單查詢(3/8)

    實(shí)驗(yàn)名稱 ?????????SQL語言進(jìn)行簡單查詢 注意:原版word在下載資源里面(免費(fèi)下載) 實(shí)驗(yàn)?zāi)康募耙螅?掌握各種查詢的SQL腳本寫法,包括SELECT、FROM、WHERE、GROUP BY、HAVING子句的用法,特別要求比較內(nèi)連接、外連接的結(jié)果 在XSGL數(shù)據(jù)庫中,使用各種查詢條件完成指定的查詢

    2024年02月02日
    瀏覽(109)
  • 如何通過navicat連接SQL Server數(shù)據(jù)庫

    如何通過navicat連接SQL Server數(shù)據(jù)庫

    ? ? ? ?本文介紹如何通過Navicat 連接SQL Server數(shù)據(jù)庫。如果想了解如何連接Oracle數(shù)據(jù)庫,可以參考下邊這篇文章。 如何通過Navicat連接Oracle數(shù)據(jù)庫 https://sgknight.blog.csdn.net/article/details/132064235 1、新建SQL Server連接配置 ? ? ? ? 打開Navicat軟件,點(diǎn)擊連接,選擇SQL server,進(jìn)入配置頁

    2024年02月04日
    瀏覽(93)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包