Python学习之GUI--SQL数据库连接

1 前言

在进行SQL数据库连接之前,我们需要先了解一下pymssql库。有关pymssql的解释推荐大家去官网学习。网上有关这方面的知识大部分是实例为主,不利于学习。另一方面,经过他人咀嚼过的知识也总是差那么点味道。

2 pyssql简介

A simple database interface for Python that builds on top of FreeTDS to provide a Python DB-API (PEP-249) interface to Microsoft SQL Server.

大意就是pymssql的一个python链接SQL数据库的接口包,至于其中提到的FreeTDS,如果你是Linux是需要安装这个包的,当然如果你是Windows系统就可以直接跳过这个问题了

FreeTDS is required. On some platforms, we provide a pre-compiled FreeTDS to make installing easier, but you may want to install FreeTDS before doing pip install pymssql if you run into problems or need features or bug fixes in a newer version of FreeTDS. You can build FreeTDS from source if you want the latest. If you’re okay with the latest version that your package manager provides, then you can use your package manager of choice to install FreeTDS. E.g.

Generally,you will want to install pymssql with:

pip install pymssql

3 SQL数据库连接

先上代码

def __GetConnect(self):
        """
        得到连接信息
        返回: conn.cursor()
        """
        if not self.db:
            raise(NameError,"没有设置数据库信息")
        self.conn = pymssql.connect(host=self.host,user=self.user,password=self.pwd,database=self.db,charset="utf8")
        #打开游标
        cur = self.conn.cursor()
        if not cur:
            raise(NameError,"连接数据库失败")
        else:
            return cur

第一步: 通过connect完成对数据库的连接

conn = pymssql.connect(host,user,password,database,charset="utf8")
参数解释
server数据库服务器名称或IP
user用户名
password密码
database数据库名称
charset数据的编码格式,可以省略

截图示例:
这里写图片描述
第二步: 创建一个游标

cur = self.conn.cursor()

到这了数据库就算连接成功了,下面介绍如何对数据进行操作

4 SQL查询操作

输入SQL查询语句–>执行sql语句–>获取查询结果–>关闭数据库连接–>返回查询结果

def ExecQuery(self,sql):
        """
        执行查询语句
        返回的是一个包含tuple的list,list的元素是记录行,tuple的元素是每行记录的字段
        """
        cur = self.__GetConnect()
        #执行sql语句,获取所有数据
        print(sql)
        cur.execute(sql)
        #resList是list,而其中的每个元素是 tuple
        resList = cur.fetchall()
        #查询完毕后必须关闭连接
        self.conn.close()
        return resList

5 SQL非查询操作

输入SQL操作语句–>执行sql语句–>关闭数据库连接–>返回查询结果

请注意一定要有conn.commit()这句来提交事务,要不然不能真正的插入数据。

def ExecNonQuery(self,sql):
        """
        执行非查询语句
        """
        cur = self.__GetConnect()
        #执行sql语句,修改数据
        cur.execute(sql)
        #执行sql语句
        self.conn.commit()
        self.conn.close()

6 一份完整的SQL数据库操作代码


#在这里进行SQL数据库操作

import pymssql

class MSSQL:
    def __init__(self,host,user,pwd,db):
        self.host = host
        self.user = user
        self.pwd = pwd
        self.db = db

    def __GetConnect(self):
        """
        得到连接信息
        返回: conn.cursor()
        """
        if not self.db:
            raise(NameError,"没有设置数据库信息")
        self.conn = pymssql.connect(host=self.host,user=self.user,password=self.pwd,database=self.db,charset="utf8")
        #打开游标
        cur = self.conn.cursor()
        if not cur:
            raise(NameError,"连接数据库失败")
        else:
            return cur

    def ExecQuery(self,sql):
        """
        执行查询语句
        返回的是一个包含tuple的list,list的元素是记录行,tuple的元素是每行记录的字段
        """
        cur = self.__GetConnect()
        #执行sql语句,获取所有数据
        print(sql)
        cur.execute(sql)
        #resList是list,而其中的每个元素是 tuple
        resList = cur.fetchall()
        #查询完毕后必须关闭连接
        self.conn.close()
        return resList

    def ExecNonQuery(self,sql):
        """
        执行非查询语句
        """
        cur = self.__GetConnect()
        #执行sql语句,修改数据
        cur.execute(sql)
        #执行sql语句
        self.conn.commit()
        self.conn.close()

def main(opType,sql):

    #获取数据库对象
    ms = MSSQL(host="Test",user="sa",pwd="123",db="YSZYGLXT2")

    if opType == "YES":
        #进行数据库查询
        resList = ms.ExecQuery(sql)
        # for (account,password,typeData) in resList:
        return resList
    elif opType == "NO":
        #进行非查询操作
        ms.ExecNonQuery(sql)
    else:
        print("程序在判断操作类型处出错!请检查,出错地址:SQLOperation.py文件")

if __name__ == '__main__':
    main()
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'aaa.ui' # # Created by: PyQt5 UI code generator 5.11.3 # # WARNING! All changes made in this file will be lost! import sys, os from PyQt5 import QtCore, QtWidgets, QtGui from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5 import QtCore, QtGui, QtWidgets class U_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(1204, 836) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth()) MainWindow.setSizePolicy(sizePolicy) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.tableWidget = QtWidgets.QTableWidget(self.centralwidget) self.tableWidget.setGeometry(QtCore.QRect(80, 240, 1041, 371)) self.tableWidget.setAutoScrollMargin(9) self.tableWidget.setRowCount(9) self.tableWidget.setColumnCount(8) self.tableWidget.setObjectName("tableWidget") item = QtWidgets.QTableWidgetItem() self.tableWidget.setVerticalHeaderItem(0, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setVerticalHeaderItem(1, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setVerticalHeaderItem(2, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setVerticalHeaderItem(3, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setVerticalHeaderItem(4, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setVerticalHeaderItem(5, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setVerticalHeaderItem(6, item) item = Q
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

K同学啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值