菜单

洗礼灵魂,修炼python(玖一)– 知识十遗篇 —— pymysql模块之python操作mysql增加和删除改查,pythonpymysql

2019年5月3日 - Java

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

其次,python要想操作mysql,靠python的停放模块是那多少个的,而壹旦经过os模块调用cmd命令即便原理上是能够的,不过依旧不太有利,那么那些主题材料,很已经有人想过了,而且还做出来了,不赘述,正是第一方模块pymysql和mysqldb了。

唯独,python3暂不帮助mysqldb,pymysql却是python2和3都协助的

因此,本篇博文说说pymysql,学了pymysql,mysqldb其实你也会了

 

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

pymysql

第2你得学会基本的mysql操作语句:mysql学习

说不上,python要想操作mysql,靠python的放置模块是十三分的,而壹旦经过os模块调用cmd命令就算原理上是足以的,可是依然不太有利,那么这些主题材料,很已经有人想过了,而且还做出来了,不赘述,正是第一方模块pymysql和mysqldb了。

可是,python3暂不支持mysqldb,pymysql却是python2和叁都协理的

从而,本篇博文说说pymysql,学了pymysql,mysqldb其实你也会了

 

1.安装

使用pip安装:

 图片 1

 

pymysql

2.使用

1.安装

使用pip安装:

 图片 2

 

增:

 壹)固定数据插入:

#!usr/bin/env python
#-*- coding:utf-8 -*-
# author:yangva

import 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()

  

在运维在此以前,先看下数据Curry的多寡:

图片 3

 

好的,初步运转:

运转结果:

图片 4

 

从未有过报错便是好新闻,再看下数据有转移并未有:

图片 5

 

好的,插入进去了

 

先看图:

 

图片 6

 

骨子里您有未有发掘,那么些都以固定的格式,就和socket大约,就标明的这两句是有转换的,第一句是连连数据库等装置,第二据就是大家的sql语句,那么难题就简单了对吗?

 

然后,假使您插入的多寡希望是华语的,仍是可以在第二句创设数据库连接时时加二个参数charset

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

  

 

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

这便是说再看,如若我们让用户自身输入待插入的数据吧:

其它不改变,只修改这一片段

A:两个列数据插入

图片 7

 

只顾上边的VALUES()里不要再加引号,因为input里已经有引号了

 

运作结果:

 图片 8 

 

图片 9

 

 

B:如果你只是插入一单个数据,能够如此

图片 10

 

C:那么有意中人要问了,为啥不那样作字符串拼接呢:

图片 11

 

 这几个点子即使也立见成效,可是是禁止的,因为也许会现出sql注入漏洞,而用地方的方法的话,execute()方法能够流传三个参数,自动帮大家字符串拼接好了

 

D:sql注入漏洞表率:

图片 12

 

看来了呢,其实作者的表里并从未二叁的单位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:yangva

import 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方法会报错

 

运作结果:

图片 13

 

图片 14

 

2.使用

改:

 

时下表里的多寡是这个:

图片 15

 

或许地点那语句,只改了那一块,别的不改变 

图片 16

 

 运维结果:

图片 17

图片 18

 

完全OjbK

 

增:

 壹)固定数据插入:

#!usr/bin/env python
#-*- coding:utf-8 -*-
# author:yangva

import 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()

  

在运转从前,先看下数据Curry的数量:

图片 19

 

好的,起初运营:

运维结果:

图片 20

 

未有报错便是好音信,再看下数占领变动未有:

图片 21

 

好的,插入进去了

 

先看图:

 

图片 22

 

实际上你有未有开掘,那几个皆以原则性的格式,就和socket大约,就标明的那两句是有转移的,第二句是连接数据库等设置,第3据正是大家的sql语句,那么难点就简单了对吗?

 

然后,壹经你插入的数量希望是中文的,还足以在第三句创立数据库连接时时加三个参数charset

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

  

 

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

那正是说再看,假诺大家让用户自个儿输入待插入的数目吧:

其余不改变,只修改那一有的

A:多个列数据插入

图片 23

 

小心上边的VALUES()里不要再加引号,因为input里已经有引号了

 

运转结果:

 图片 24 

 

图片 25

 

 

B:假设您只是插入一单个数据,能够这么

图片 26

 

C:那么有相爱的人要问了,为啥不那样作字符串拼接呢:

图片 27

 

 那些格局固然也使得,可是是明确命令禁止的,因为兴许会冒出sql注入漏洞,而用地点的主意的话,execute()方法能够流传八个参数,自动帮大家字符串拼接好了

 

D:插入二个可迭代对象:

#!usr/bin/env python
#-*- coding:utf-8 -*-
# author:yangva

import 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方法会报错

 

运营结果:

图片 28

 

图片 29

 

删:

 

先看下近年来的数码:

 图片 30

 

同等的,别的不改变,就上边那1段有浮动

图片 31

 

运作结果:

图片 32

图片 33

 

一样的OjbK 

 

改:

 

此时此刻表里的数码是那个:

图片 34

 

抑或地方那语句,只改了那壹块,其余不改变 

图片 35

 

 运转结果:

图片 36

图片 37

 

完全OjbK

 

查:

#!usr/bin/env python
#-*- coding:utf-8 -*-
# author:yangva

import 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运营结果:

图片 38

 

fetchmany运转结果:

图片 39

 

fetchall()运转结果:

图片 40

 

假定您想同时选拔fetchone,fetchmany,fetchall的话,会成那样:

图片 41

 

本身想,你应该能看懂,不用小编多说,反正你理解它就和文件读取操作是1致的,都有指针

 

那便是说你说,小编哪怕想同时选拔方面包车型地铁八个fetch方法,并且作者想让它都能准确的取到希望的数目,这几个如何做吧?在文书操作里我们可以利用seek()来设定指针地点,那么这里运用什么措施吗?

 

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

 

没有错了,使用那么些scroll方法就足以修改指针地点了

 

好的,将来再看看:

图片 42

 

增加补充:尽管你插入数据后,希望知道自增列有微微多少了,可以动用代码查看:

row = cursor.lastrowid

  

 

到家!O了,本篇博文甘休

删:

 

先看下近来的多寡:

 图片 43

 

同等的,别的不改变,就下边那一段有转移

图片 44

 

运作结果:

图片 45

图片 46

 

一样的OjbK 

 

查:

#!usr/bin/env python
#-*- coding:utf-8 -*-
# author:yangva

import 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运营结果:

图片 47

 

fetchmany运维结果:

图片 48

 

fetchall()运维结果:

图片 49

 

若果您想同时选用fetchone,fetchmany,fetchall的话,会成这么:

图片 50

 

自家想,你应有能看懂,不用自个儿多说,反正你精晓它就和文书读取操作是同样的,都有指针

 

那么你说,我正是想同时利用方面包车型大巴八个fetch方法,并且本身想让它都能科学的取到希望的多少,那么些如何是好呢?在文件操作里大家能够运用seek()来设定指针地点,那么这里运用什么点子吧?

 

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

 

没有错了,使用这么些scroll方法就可以修改指针地点了

 

好的,未来再看看:

图片 51

 

全盘!O了,本篇博文甘休

http://www.bkjia.com/Pythonjc/1309353.htmlwww.bkjia.comtruehttp://www.bkjia.com/Pythonjc/1309353.htmlTechArticle洗礼灵魂,修炼python(91)– 知识十遗篇 ——
pymysql模块之python操作mysql增删改查,pythonpymysql
首先你得学会基本的mysql操作语句:mysql学习…

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图