python 中 pymysql 模块链接 MySQL 数据库,进行数据验证及封装
1、Python 需要安装 pymysql 模块
步骤:
- 创建链接
- 创建游标
- 需要执行 sql 语句
- 执行 sql
- 手动提交
- 获取执行结果
- 关闭链接
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/,谢谢!!*******