zoukankan      html  css  js  c++  java
  • python 中 pymysql 模块链接 MySQL 数据库,进行数据验证及封装

    1、Python 需要安装 pymysql 模块

      步骤:

    1. 创建链接
    2. 创建游标
    3. 需要执行 sql 语句
    4. 执行 sql
    5. 手动提交
    6. 获取执行结果
    7. 关闭链接

    2、链接数据库,简单验证

    import pymysql
    
    # 1.建立链接,使用 pymysql 库中的 connect(可耐科特)
    conn = pymysql.connect(host='数据库主机名',
                           user='用户名',
                           password='密码',
                           db='数据库名',
                           port=3306,
                           charset='utf8',  # 编码集utf8,不能写utf-8
                           cursorclass=pymysql.cursors.DictCursor)  # 游标类pymysql.cursors(考死).DictCursor(迪斯科考死)
    # DictCursor游标类,返回单个结果为字典,多个结果为嵌套字典的列表
    # 不添加 cursorclass 游标嵌套元祖的元祖
    
    # 2.创建游标 ,使用链接当中的 cursor(烤色)方法,使用游标对象进行接收 cursor
    cursor = conn.cursor()  
    
    # 3.需要执行 sql 语句
    # 方式一:查询单条数据
    sql = "select * from member where mobilephone=13264489754;"
    
    # 方式二:用户输入手机号查询
    # 使用 %s 站位,传入用户输入的值 mobile
    # mobile = input("请输入您的手机号:")
    # sql1 = "select * from member where mobilephone=%s;"
    
    # 方式三:查询多条数据
    # sql2 = "select * FROM member LIMIT 0,10;"
    
    # 4.执行那条 sql 语句,使用 游标 当中的 execute(埃克斯Q特)
    # 执行第一条sql
    cursor.execute(sql)
    
    # 执行第二条sql
    # cursor.execute(sql1, args=(mobile,))  # args(阿格斯)=需要传一个序列类型,列表,元祖,字符串,一个元素的元祖使用逗号
    
    # 执行第三条sql
    # cursor.execute(sql2)
    
    # 5.手动提交,使用 链接对象当中的 commit(可买次)
    conn.commit()
    
    # 6.获取执行结果,使用 游标 当中的 fetchone(翻吃万)
    result1 = cursor.fetchone()  # fetchone(翻吃万)只返回一个结果,一条记录组成的字典
    # print(result1)
    
    result2 = cursor.fetchall()   # fetchall(翻吃奥) 获取多条结果,嵌套字典的列表
    # print(result2)
    
    # 7.关闭链接,释放资源 close(科楼司)
    # 先关游标
    cursor.close()
    # 再关闭链接对象
    conn.close()

    3、使用 pymysql 模块来连接mysql, 执行sql语句, 进行数据校验

    import pymysql
    
    
    class HandleMysql:
        """
        使用 pymysql 模块来连接mysql, 执行sql语句, 进行数据校验
        """
        def __init__(self):
            self.conn = pymysql.connect(host='数据库主机名,可以放在配置文件',
                                        user='用户名,可以放在配置文件',
                                        password='密码,可以放在配置文件',
                                        db='那个数据库名,可以放在配置文件',
                                        port='端口号,可以放在配置文件',
                                        charset='utf8',
                                        cursorclass=pymysql.cursors.DictCursor)
            self.cursor = self.conn.cursor()    # 创建游标
    
        def run(self, sql, args=None, is_more=False):     # is_more是否是多个
            """
            执行sql语句
            :param sql:sql语句
            :param args:元组类型可变参数(用于sql语句字符串中的占位符填充时传参使用)
            :param is_more:默认False为执行一条sql语句
            :return:sql语句执行结果(fetchone()返回的是一个字典,fetchall()返回的是一个嵌套字典的列表)
            """
            self.cursor.execute(sql, args=args)  # 执行sql
            self.conn.commit()  # 手动提交
            if is_more:
                return self.cursor.fetchall()   # is_more 为 Trun获取多条执行结果
            else:
                return self.cursor.fetchone()   # is_more 为 False获取单条执行结果
    
        def close(self):
            """
            关闭链接,释放资源
            """
            self.cursor.close()     # 关闭游标
            self.conn.close()       # 关闭数据库
    
    
    if __name__ == '__main__':
        mobile = '13264489754'   # 查询手机号
        sql_1 = "select * from member where mobilephone=%s;"
        sql_2 = "select * FROM member LIMIT 0,10;"
    
        do_mysql_1 = HandleMysql()
    
        res1 = do_mysql_1.run(sql_1, args=(mobile,))
        print(res1)
    
        do_mysql_2 = HandleMysql()
        res2 = do_mysql_2.run(sql_2, is_more=True)
        print(res2)

    4、示例:创建三个手机号

      random (译:软的木)库主要用于随机生成数,详细讲解查看博客:https://www.cnblogs.com/masked/p/8846439.html

    import random
    import pymysql
    
    
    class HandleMysql:
        """
        使用 pymysql 模块来连接mysql, 执行sql语句, 进行数据校验
        """
        ...........和上面代码一致需要.....
    
        @staticmethod
        def create_mobile():
            """
            随机生成11位手机号
            :return: 返回一个手机号字符串
            """
            start_mobile = ['138', '139', '188']
            start_mobile = random.choice(start_mobile)   # choice:(译:锤死)方法,从序列中随机选择一个元素
            end_num = ''.join(random.sample('0123456789', 8))
            return start_mobile + end_num
    
        def is_existed_mobile(self, mobile):
            """
            判断给定的手机号在数据库中是否存在
            :param mobile: 11位手机号组成的字符串
            :return: 能够查到结果返回的是字典 为True or 否则没有被注册返回为 none 为False
            """
            sql = "SELECT MobilePhone FROM member WHERE MobilePhone=%s;"
            if self.run(sql, args=(mobile,)):  # 手机号已经存在,则返回True,否则返回False
                return True
            else:
                return False
    
        def create_not_existed_mobile(self):
            """
            随机生成一个在数据库中不存在的手机号
            :return: 返回为 true 说明已经被注册,not继续循环,返回一个手机号字符串
            """
            while True:
                one_mobile = self.create_mobile()
                if not self.is_existed_mobile(one_mobile):
           # return one_mobile   # 直接return 也可以
                    break
            return one_mobile
    
    
    if __name__ == '__main__':
        mobile = '18999990262'
        sql_1 = "SELECT * FROM member WHERE MobilePhone=%s"
        sql_2 = "SELECT * FROM member LIMIT 0, 10;"
    
        do_mysql = HandleMysql()
        # res1 = do_mysql.run(sql_1, args=(mobile, ))
        # print(res1)
        #
        # res2 = do_mysql.run(sql_2, is_more=True)
        # print(res2)
    
        print("创建未注册的手机号: {}".format(do_mysql.create_not_existed_mobile()))

    *******请大家尊重原创,如要转载,请注明出处:转载自:https://www.cnblogs.com/shouhu/   谢谢!!******* 

    本文仅供参考;如果这篇文件对你有所帮助,麻烦动动发财的小手,推荐一波支持下万分感谢 *******请大家尊重原创,如要转载,请注明出处:作者:守护@往昔;转载自:https://www.cnblogs.com/shouhu/,谢谢!!*******
  • 相关阅读:
    js-实现点击按钮直接打印
    XMLHTTPREQUEST–获取上传文件的进度
    The prop 'history' is marked as required in 'Router', but its value is 'undefined'.in Router
    javascript之闭包,递归,深拷贝
    node之get与post
    css公共样式
    php之创建jsonp接口调数据
    javascript之创建对象的方式
    angular之两种路由
    php之上传图片及传数据到mysql
  • 原文地址:https://www.cnblogs.com/shouhu/p/12148980.html
Copyright © 2011-2022 走看看