python mysql 封装
封装
- 观察前面的文件发现,除了sql语句及参数不同,其它语句都是一样的
- 创建MysqlHelper.py文件,定义类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | #encoding=utf8 import MySQLdb class MysqlHelper(): def __init__( self ,host,port,db,user,passwd,charset = 'utf8' ): self .host = host self .port = port self .db = db self .user = user self .passwd = passwd self .charset = charset def connect( self ): self .conn = MySQLdb.connect(host = self .host,port = self .port,db = self .db,user = self .user,passwd = self .passwd,charset = self .charset) self .cursor = self .conn.cursor() def close( self ): self .cursor.close() self .conn.close() def get_one( self ,sql,params = ()): result = None try : self .connect() self .cursor.execute(sql, params) result = self .cursor.fetchone() self .close() except Exception, e: print e.message return result def get_all( self ,sql,params = ()): list = () try : self .connect() self .cursor.execute(sql,params) list = self .cursor.fetchall() self .close() except Exception,e: print e.message return list def insert( self ,sql,params = ()): return self .__edit(sql,params) def update( self , sql, params = ()): return self .__edit(sql, params) def delete( self , sql, params = ()): return self .__edit(sql, params) def __edit( self ,sql,params): count = 0 try : self .connect() count = self .cursor.execute(sql,params) self .conn.commit() self .close() except Exception,e: print e.message return count |
添加
- 创建testInsertWrap.py文件,使用封装好的帮助类完成插入操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #encoding=utf8 from MysqlHelper import * sql = 'insert into students(sname,gender) values(%s,%s)' sname = raw_input ( "请输入用户名:" ) gender = raw_input ( "请输入性别,1为男,0为女" ) params = [sname, bool (gender)] mysqlHelper = MysqlHelper( 'localhost' , 3306 , 'test1' , 'root' , 'mysql' ) count = mysqlHelper.insert(sql,params) if count = = 1 : print 'ok' else : print 'error' |
查询一个
- 创建testGetOneWrap.py文件,使用封装好的帮助类完成查询最新一行数据操作
1 2 3 4 5 6 7 8 | #encoding=utf8 from MysqlHelper import * sql = 'select sname,gender from students order by id desc' helper = MysqlHelper( 'localhost' , 3306 , 'test1' , 'root' , 'mysql' ) one = helper.get_one(sql) print one |
实例:用户登录
创建用户表userinfos
- 表结构如下
- id
- uname
- upwd
- isdelete
- 注意:需要对密码进行加密
- 如果使用md5加密,则密码包含32个字符
- 如果使用sha1加密,则密码包含40个字符,推荐使用这种方式
1 2 3 4 5 6 | create table userinfos( id int primary key auto_increment, uname varchar (20), upwd char (40), isdelete bit default 0 ); |
加入测试数据
- 插入如下数据,用户名为123,密码为123,这是sha1加密后的值
1 | insert into userinfos values (0, '123' , '40bd001563085fc35165329ea1ff5c5ecbdbbeef' ,0); |
接收输入并验证
- 创建testLogin.py文件,引入hashlib模块、MysqlHelper模块
- 接收输入
- 根据用户名查询,如果未查到则提示用户名不存在
- 如果查到则匹配密码是否相等,如果相等则提示登录成功
- 如果不相等则提示密码错误
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #encoding=utf-8 from MysqlHelper import MysqlHelper from hashlib import sha1 sname = raw_input ( "请输入用户名:" ) spwd = raw_input ( "请输入密码:" ) s1 = sha1() s1.update(spwd) spwdSha1 = s1.hexdigest() sql = "select upwd from userinfos where uname=%s" params = [sname] sqlhelper = MysqlHelper( 'localhost' , 3306 , 'test1' , 'root' , 'mysql' ) userinfo = sqlhelper.get_one(sql,params) if userinfo = = None : print '用户名错误' elif userinfo[ 0 ] = = spwdSha1: print '登录成功' else : print '密码错误' |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)