pymysql使用的简易教程

参考资料:https://www.bilibili.com/video/BV1DE411n7fU?p=41

简介

pymysql是python的一个模块,其作用是帮助开发者利用python语言管理MySQL数据

安装

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pymysql
(笔者使用清华的镜像源,速度还比较快)

关键操作

1、连接、关闭(连接器conn,游标cursor)以查数据为例

import pymysql

user = input("username: ")
pwd = input("password: ")

conn = pymysql.connect(host="localhost", user="root", password="", database="db6", charset="utf8")
#utf8可以使得表中的中文正常显示,而不会显示成乱码。
#conn本质上是python利用pymysql创建的一个链接,可以形象的理解为一座虚拟的连接python和MySQL数据库的桥梁
cursor = conn.cursor()
#cursor的本意是游标,但在这里其实是通过前面创建的conn桥梁,cursor类似于一个小机器人帮我们进行增删改查等操作。它的游标的意义主要体现在查的时候取数据的顺序性。

sql = "select * from userinfo where username=%(u)s and password=%(p)s " #这个字符串就是sql语句, 其中userinfo是db6中的一个数据表。
#在sql语句中,‘=’就表示等于的意思,而不是python中的赋值的意思。

cursor.exercute(sql, user, pwd)
#cursor.exercute(sql, [user, pwd])
#cursor.exercute(sql, {'u': user, 'p': pwd})
#以上三种方式均可以执行sql语句

result = cursor.fetchone()
cursor.close()
conn.close()

2、execute() --(这里可能有SQL注入的风险):这里SQL注入就是利用一个必定成立的条件以及 --(SQL中的注释符,将后方的条件注释掉),使得黑客能够成功登录。

#在写sql语句时,如果自己做sql语句的拼接,则容易被sql注入
sql = "select * from userinfo where username='%s' and password='%s'"%(user, pwd)
cursor.exercute(sql)
result = cursor.fetchone()
if result:
	print("登陆成功")
else:
	print("登陆失败")	
#假如输入的username 是 gcweuyfg' or 1=1 --
#password不写,都能登陆成功
#实际上内部是讲user和pwd替换前面的sql语句中的%s,而若username 像上面那样写,因为1=1恒成立,且后面的password被注释掉了,所以一定会登陆成功。即使数据库中并没有这个用户。所以,为了尽可能的避免sql注入,使用上一部分中在exercute中传递参数的方法。

3、增删改(即需要对数据表进行数据的改动时):需要用conn.commit()

sql = "insert into userinfo(username, password) values("张三", "123456")"
cursor.exercute(sql)
conn.commit()#保证这些对数据表的更改在保存在硬盘中的数据表真正进行了操作。

4、获取插入数据自增ID

sql = "insert into userinfo(username, password) values("张三", "123456")"
cursor.exercute(sql)
ID = cursor.lastrowid #插入数据的自增ID
conn.commit()#保证这些对数据表的更改在保存在硬盘中的数据表真正进行了操作。

5、Fetchone, fetchall

cursor.fetchone()#取出数据表中满足sql语句的第一条数据行
cursor.fetchall()#取出数据表中满足sql语句的所有数据行

6、创建表,删除表

sql1 = "create table userinfo(id int auto_increment primary key,\
username char(30),\
password int) engine = innodb default charset=utf8"
sql2 = "drop table userinfo"

cursor.exercute(sql1)#创建表
cursor.exercute(sql2)#删除表

一个小例子

要求

1.Python实现用户权限查询
2.用户的数据存放在MySQL中

实现方式1

3个表:

  • 用户表(u_id, name, pwd)
  • 权限表(id, quanxian_name)
  • 用户权限关系表(uid, id)

实现方式2(更符合实际,操作起来更便捷)

4个表

  • 用户信息表(u_id, name, pwd, role_id)
  • 权限表(q_id, quanxian_name)
  • 角色(职位)表(role_id, role_name)
  • 角色权限关系表(role_id, q_id)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值