python的mvc框架_mysql库使用

基本MVC框架搭建

  • (1) 建立MVC框架

    • ① 模型模块(mode):处理业务的应用程序,model操作数据库,比如插入,更新,删除。每个模型会提供固定类型的数据给控制模块,另一方面,控制模块可以调用模型的不同方法处理数据,并将处理后的结果返回给视图模型

    • ② 控制模块(controller):可以被看作是一个介于用户,处理(model),显示(view)之间的中间人。它是用户请求的入口,也是应用处理的入口。控制模块接受用户输入,解析,决定哪一个model和view参与处理,因此,它决定了针对用户请求,选择何种view和model。

    • ③ 视图模块(view):主要用来显示,通过控制模块获取模型模块处理后的数据,并进行格式化的显示。通过控制模块选择view并显示反馈给用户。view模型的选择是基于模型模块的l选择和用户配置等等。

  • (2) 配置文件:setting.py

  • (3) 程序入口脚本文件:user_run.py

  • (4) 框架所需要的第三方包:requirements.txt

mode层

从存储区获取数据,使用pymysql安装包访问mysql数据库

1.pymsql作用:连接数据库,其操作方法如下
  (1)导包:import pymysql
  (2)建立连接:pymysql.connect(),并生成对象conn:conn = pymysql.connect()
        connect()需要传入的参数有:
            1)user:代表连接数据库的用户名
            2)password:连接数据的密码
            3)host:连接数据库的主机名
            4)database:连接的数据库名
            5)port:连接端口
            6)charset:设置密码
    (3)建立游标:cursor = conn.cursor()
    (4)执行sql语句:增删改查,例如:cursor。execute(sql)
            查询一条数据:cursor.getone()
            查询所有数据:cursor.getall()
    (5)关闭游标对象:cursor.close()
    (6)关闭连接对象:conn.close()

实例

import pymysql
#导入配置文件
from setting import DB_CONFIG
​
#定义类
class Mysql():
    # 构造方法
    def __init__(self):
        # 连接数据
        # # 方式1:将连接参数固定
        # self.conn = pymysql.connect(user='root', password='root', host="localhost", database='school', charset='utf8')
        #方式2:将连接数据的参数设置在配置文件(setting)中:user='root',password='root',host="localhost",database='school',charset='utf8'
            # 将配置文件setting中的常量(DB_CONFIG)以字典的形式传入数据库pymysql。connect方法
        self.conn = pymysql.connect(**DB_CONFIG)
​
​
    # 增删改的方法
    def update(self,sql):
        print("接收到的sql语句:{}".format(sql))
        try:
            with self.conn.cursor() as cursor:
                # 执行sql语句
                cursor.execute(sql)
                # 将修改的数据提交到数据库
                self.conn.commit()
        # 如果try中的代码块在执行sql时出错时则返回上一步操作不执行改sql语句
        except Exception as e:
            self.conn.rollback()
            return "非空"
        finally:
            if self.conn:
                self.conn.close()
    #查询数据的方法
    def get_all(self,sql):
        try:
            #使用with建立/关闭游标对象 :cursor
            with self.conn.cursor() as cursor:
                # 执行sql语句
                cursor.execute(sql)
                # 查询sql语句
                result = cursor.fetchall()
                return result
        #try中的代码块若出现异常则处理并打印异常信息
        except Exception as e:
            print(e)
        #以上代码块执行结束后最后断开mysql数据库连接
        finally:
            #如果mysql连接对象存在,则关闭连接对象:conn.close()
            if self.conn:
                self.conn.close()
# 运行base.py文件的入口:main方法
if __name__ == '__main__':
    # 定义一个查询的sql语句并赋值给变量sql
    sql = "select * from students where name = '刘邦'"
    # 定义一个更新的sql语句并赋值给变量update_sql
    update_sql = "update students set class = '7班' where studentNo = 12 "
​
​
    # 创建Mysql对象实例
    mysql = Mysql()
    # print(mysql)
    #1. 调用类mydql中的查询方法:get_all并将返回值赋值给result变量
    select_result = mysql.get_all(sql)
    print(select_result)
    # # 2. 调用mysql中的更新方法:update,可通过Navicat查看是否更新成功
    # mysql.update(update_sql)

controller层;业务逻辑层

获取用户输入,并将模型与视图建立联系

from mode.base import Mysql
​
# 定义一个类
class Student():
    def __init__(self):
        # #初始化mysql对象
        self.mysql = Mysql()
    #添加学生的业务
    def add_student(self,*args):
        #固定的sql语句
        # sql= "INSERT INTO students(studentNo,name,age,class,card,city) VALUES(13,'lili','女','4班','234567843267892456','北京')"
        #将可元组*args转化为列表lst:list()
        lst= list(args)
        #若传入的参数列表的长度小于7个值时,将未传入的参数值设置为空字符串
        while len(lst) <=6:
            lst.append('')
        #变化的sql语句:格式化
        sql_form = "INSERT INTO students(studentNo,name,age,class,card,city) " \
                   "VALUES({},'{}','{}','{}','{}','{}')".format(*args)
        result = self.mysql.update(sql_form)
        if not result:
            print("添加学生成功")
        else:
            print("添加学生失败")
​
    #删除学生的业务
​
    #修改学生的业务
    def mod_student(self,col_name,value,id):
        sql = "UPDATE students SET {} = '{}' WHERE studentNo = {}".format(col_name,value,id)
        result = self.mysql.update(sql)
        if not result:
            print("修改成功")
        else:
            print("修改不成功")
    #查询学生的业务
    def get_student(self, name):
        sql = "select * from students where name like '%{}%'".format(name)
        print(sql)
        result = self.mysql.get_all(sql)
        if result:
            print("查询结果成功:{}".format(result))
        else:
            print("查询失败")
​
if __name__ == '__main__':
    s = Student()
    #1.查询学生数据
    # s.get_student('李艾')
    # #2. 插入学生数据
    # s.add_student(16,'李0','女','8班')  #传入参数小于6
    # s.add_student(17, '李1', '女', '7班', '234567843267892456', '北京')  #传入参数等于6
    # s.add_student(18, '李2', '女', '9班', '234567843267892456', '北京','信息学院')  #传入参数大于6
    #3. 修改学生数据
    s.mod_student('age','30',9)

view层:用户界面层

展示给用户,从模型获取的数据,使用user_run.py代替

其他文件

requirements.txt

# 本框架所需要的所有第三方包,若存在pycharm将会提示安装安装
# 连接数据并固定mysql版本:查看mysql版本:pip show pymysql
pymysql==1.0.2

setting.py

#配置文件:配置信息
​
#1. 连接数据库的配置信息,大写字母:DB_CONFIG(常量)
DB_CONFIG = {
    'host':'localhost',
    'user':'root',
    'password':'root',
    'database':'school',
    'charset':'utf8'
}

user_run.py

# 入口脚本文件:user_run.py
from controller.student import Student
#程序的入口方法,仅限于当前文件执行,如果不是user_run.py文件的main方法不运行
if __name__ == '__main__':
​
    #判断text,
    """
    1. 当用户传入的值是1或者是’新增‘,就给他调用新增,继续传入新增所需要的参数
    2. 当用户传入的值是2或者是’修改‘,调用修改方法,继续传入修改参数
    3. 当用户传入的值是3或者是’删除‘,调用删除方法,继续传入删除参数
    4. 否则,就调用查询方法
    """
    st = Student()
    text = input("请输入数据")
    if text in ['1','新增']:
        print("开始调用新增的方法")
        # 用户输入数据是不能有引号:19 张磊 20 女 2班 24567865432 天津
        add = input()
        # 以空格的方式将字符串add分割并生成列表:lst
        lst = add.split(" ")
        # 将列表lst以可变量参数的方式传入并执行添加学生方法(add_student)
        st.add_student(*lst)
        pass
    elif text in ['2','修改']:
        print("开始调用修改的方法")
        pass
    elif text in ['3','删除']:
        print("开始调用删除的方法")
    else:
        print("开始调用查询方法")
        name = input()
        st.get_student(name)
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值