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/   谢谢!!******* 

posted @ 2020-01-04 14:33  守护往昔  阅读(941)  评论(0编辑  收藏  举报