美文网首页Python
巩固mysql基础-使用flask框架+pymysql(二)

巩固mysql基础-使用flask框架+pymysql(二)

作者: 铁甲依然在人间 | 来源:发表于2020-06-06 07:14 被阅读0次

    目标:

    使用flask框架+pymongo练习mysql

    需求:

    1. 添加人员
    • 姓名必填
    • 邮箱必填
    • 姓名不能重复
    • 邮箱不能重复
    1. 使用post请求,form-data请求格式

    tip:flask有封装好的操作数据库的flask-sqlalchemy,目标还是以mysql为主。
    我在网上找了一个简单封装pymysql的例子做了一些改动:

    1. 使用configparser库把配置文件配置在文件中
    2. 将例子中ExecNonQuery方法中的execute方法改成了批量的executemany方法

    https://www.jb51.net/article/178054.htm

    😘我们先看看pymysql封装的类
    db_mysql:

    import pymysql
    import configparser
    
    
    class MYSQL:
    
        def __init__(self):
            config = configparser.ConfigParser()
            filename = 'config.ini'
            config.read(filename, encoding='utf-8')
            self.host = config.get('data','host')
            self.user = config.get('data','user')
            self.pwd = config.get('data','pwd')
            self.db = config.get('data','db')
    
        def __GetConnect(self):
            if not self.db:
                raise (NameError,"未设置数据库")
            self.conn = pymysql.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的元素是每行记录的字段
    
            调用示例:
                ms = MYSQL(host="localhost",user="sa",pwd="123456",db="PythonWeiboStatistics")
                resList = ms.ExecQuery("SELECT id,NickName FROM WeiBoUser")
                for (id,NickName) in resList:
                  print str(id),NickName
            """
            cur = self.__GetConnect()
            cur.execute(sql)
            resList = cur.fetchall()
    
            # 查询完毕后必须关闭连接
            self.conn.close()
            return resList
    
        def ExecNonQuery(self, sql,values):
            """
            执行非查询语句
    
            调用示例:
              cur = self.__GetConnect()
              cur.execute(sql)
              self.conn.commit()
              self.conn.close()
            """
            cur = self.__GetConnect()
            #传入要用list
            cur.executemany(sql,values)
            self.conn.commit()
            self.conn.close()
    
    if __name__ == '__main__':
        m=MYSQL()
        mysql = "insert into staff""(staff_name,staff_dept,staff_age,staff_email,staff_sex)values(%s,%s,%s,%s,%s)"
        values =[('小王', '测试部', '15', 'ww.', '1')]
        m.ExecNonQuery(mysql,values)
    

    😘看一下配置文件
    config.ini

    [data]
    host=*****
    user=***
    pwd=****
    db=****
    
    

    😘添加人员接口
    py_flask

    from flask import Flask
    import db_mysql
    from flask import request
    import json
    
    
    app = Flask(__name__)
    
    
    @app.route('/add_staff', methods=["POST","GET"])
    def add_staff():
        data = request.form
        staff=db_mysql.MYSQL()
        mysql = "insert into staff(staff_name,staff_dept,staff_age,staff_email,staff_sex)values(%s,%s,%s,%s,%s)"
        staff_name = data['staff_name']
        staff_dept = data['staff_dept']
        staff_age = data['staff_age']
        staff_email = data['staff_email']
        print(staff_name)
        print(staff_email)
        if staff_name is '':
            return {'code': '1001', 'result': '姓名不能为空'}
        if staff_email is '':
            return {'code': '1001', 'result': 'email不能为空'}
        staff_sex = data['staff_sex']
        #查询姓名重复
        mes=staff.ExecQuery(sql= "select*from staff where staff_name = '"+staff_name+"'" )
        #邮箱重复
        mes1=staff.ExecQuery(sql= "select*from staff where staff_email = '"+staff_email+"'" )
        values = [(staff_name, staff_dept, staff_age, staff_email, staff_sex)]
        if mes is not ():
            return {'code': '1002', 'result': '人员重复'}
        if mes1 is not():
            return {'code': '1003', 'result': 'email重复'}
        else:
            staff.ExecNonQuery(sql=mysql, values=values)
        return {'code': '0', 'result': 'succsed'}
    
    if __name__ == '__main__':
    
        app.run (host='0.0.0.0', port=5001, debug=True)
    

    下面我们用postman试试

    image.png

    🐷下一篇为了更方便体验我们可以用docker+dockerfile快速构建一个环境。实现快速搭建开发环境。

    相关文章

      网友评论

        本文标题:巩固mysql基础-使用flask框架+pymysql(二)

        本文链接:https://www.haomeiwen.com/subject/dlhpzhtx.html