首页 技术 正文
技术 2022年11月14日
0 收藏 477 点赞 3,902 浏览 2945 个字

首先你得学会基本的mysql操作语句:mysql学习

其次,python要想操作mysql,靠python的内置模块是不行的,而如果通过os模块调用cmd命令虽然原理上是可以的,但是还是不太方便,那么这个问题,很早就有人想过了,而且还做出来了,不废话,就是第三方模块pymysql和mysqldb了。

但是,python3暂不支持mysqldb,pymysql却是python2和3都支持的

所以,本篇博文说说pymysql,学了pymysql,mysqldb其实你也会了

pymysql

1.安装

使用pip安装:

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

2.使用

增:

 1)固定数据插入:

#!usr/bin/env python#-*- coding:utf-8 -*-# author:yangvaimport pymysql# 创建数据库连接conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='',db='test')# 创建游标,这里的游标你可以理解为文本操作里的walk指针cursor = conn.cursor()# sql语句cursor.execute('insert into user(name,age,part_id) VALUES("ling",32,2)')# 提交数据,你可以理解为文本操作里的flush()刷新缓存存储为数据conn.commit()# 关闭连接cursor.close()conn.close()

  

在运行之前,先看下数据库里的数据:

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

好的,开始运行:

运行结果:

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

没有报错就是好消息,再看下数据有变化没有:

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

好的,插入进去了

先看图:

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

其实你有没有发现,这些都是固定的格式,就和socket差不多,就标注的那两句是有变化的,第一句是连接数据库等设置,第二据就是我们的sql语句,那么问题就简单了对吧?

然后,如果你插入的数据希望是中文的,还可以在第一句创建数据库连接时时加一个参数charset

# 创建数据库连接conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='',db='test',charset='utf8')

  

2)字符串拼接活动插入:

那么再看,如果我们让用户自己输入待插入的数据呢:

其他不变,只修改这一部分

A:多个列数据插入

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

注意上面的VALUES()里不用再加引号,因为input里已经有引号了

运行结果:

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

B:如果你只是插入一单个数据,可以这样

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

C:那么有朋友要问了,为什么不这样作字符串拼接呢:

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

这个方法虽然也可行,但是是明令禁止的,因为可能会出现sql注入漏洞,而用上面的方法的话,execute()方法可以传入两个参数,自动帮我们字符串拼接好了

D:sql注入漏洞范例:

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

看到了吧,其实我的表里并没有23的部门id对吧,但是还是查询出来了,那么如果查询的表是保存的所有用户名和密码呢?这个注入是不是很可怕了对吧?

还有更多的注入语句:

万能密码:'or'='or' select * from table where username='' or '=' or '' and password=''; "or"a"="a     ')or('a'='a")or("a"="a'or 1=1--"or 1=1--'or"=''or 1=1%00'or 1=1/*admin' or 1=1/*

  

所以一般不用这种字符串拼接的方法,还是使用pymysql给我们封装好的方法execute和executemany

E:插入一个可迭代对象:

#!usr/bin/env python#-*- coding:utf-8 -*-# author:yangvaimport pymysql# 创建数据库连接conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='',db='test',charset='utf8')# 创建游标cursor = conn.cursor()user1 = input('请输入待插入的姓名:')age1 = input('请输入待插入的年龄:')id1 = input('请输入待插入的部门id:')print('已记录')user2 = input('请输入待插入的姓名:')age2 = input('请输入待插入的年龄:')id2 = input('请输入待插入的部门id:')print('已记录')li = [(user1,age1,id1),      (user2,age2,id2)      ]# sql语句cursor.executemany('insert into user(name,age,part_id) VALUES(%s,%s,%s)',li)# 提交数据conn.commit()# 关闭连接cursor.close()conn.close()

注意上面我插入sql语句的方法已经改成executemany,不然使用execute方法会报错

运行结果:

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

改:

 

目前表里的数据是这些:

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

还是上面那语句,只改了这一块,其他不变

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

运行结果:

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

完全OjbK

删:

 

先看下目前的数据:

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

同样的,其他不变,就下面这一段有变化

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

运行结果:

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

一样的OjbK

查:

#!usr/bin/env python#-*- coding:utf-8 -*-# author:yangvaimport pymysql# 创建数据库连接conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='',db='test',charset='utf8')# 创建游标cursor = conn.cursor()# sql语句cursor.execute('select * from user')print(cursor.fetchone())# 关闭连接cursor.close()conn.close()

注意:使用查询语句时不用给commit()方法,因为没有修改数据,只是把数据拿出来而已,增删改都有对数据进行修改的操作,所以需要使用commit

能理解吧?

查询时,需要使用fetchone(),fetchmany([int]),fetchall()来得到查询的结果

fetchone运行结果:

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

fetchmany运行结果:

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

fetchall()运行结果:

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

如果你想同时使用fetchone,fetchmany,fetchall的话,会成这样:

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

我想,你应该能看懂,不用我多说,反正你知道它就和文本读取操作是一样的,都有指针

那么你说,我就是想同时使用上面的三个fetch方法,并且我想让它都能正确的取到希望的数据,这个怎么办呢?在文本操作里我们可以使用seek()来设定指针位置,那么这里使用什么方法呢?

cursor.scroll(0,mode='absolute') #相对当前位置移动cursor.scroll(0,mode='relative') #相对绝对位置移动

 

没错了,使用这个scroll方法就可以修改指针位置了

好的,现在再看看:

洗礼灵魂,修炼python(91)– 知识拾遗篇 —— pymysql模块之python操作mysql增删改查

补充:如果你插入数据后,希望知道自增列有多少数据了,可以使用代码查看:

row = cursor.lastrowid

  

完美!O了,本篇博文结束

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,084
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,559
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,408
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,181
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,818
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,901