python与mysql数据库交互的实现


Posted in Python onJanuary 06, 2020

1、安装pymysql库

如果你想要使用python操作MySQL数据库,就必须先要安装pymysql库,这个库的安装很简单,直接使用pip install pymysql;进行安装。
假如上面这种方式还是安装不上,就用如下链接找一个合适的安装包进行安装,这个就不细说了,请自行百度。
https://www.lfd.uci.edu/~gohlke/pythonlibs/
学习本篇文章,最好是先看我另外一篇关于游标cursor讲解的文章,这样会有更好的效果:https://3water.com/article/177865.htm

2、使用python连接mysql数据库
1)六个常用的连接参数

  • 参数host:mysql服务器所在的主机的ip;
  • 参数user:用户名
  • 参数password:密码
  • 参数port:连接的mysql主机的端口,默认是3306
  • 参数db:连接的数据库名
  • 参数charset:当读取数据出现中文会乱码的时候,需要我们设置一下编码;我们使用python操作数据库的时候,那么python就相当于是client,我们是用这个client来操作mysql的server服务器,python3默认采用的utf8字符集,我的mysql服务器默认采用latin1字符集,因此mysql中创建的每张表,都是建表的时候加了utf8编码的,因此这里设置的应该就是connection连接器的编码。

什么是connection?可以参考我的另外一篇文章学习。
https://3water.com/article/177872.htm

2)python连接mysql的语法

import pymysql 
db = pymysql.connect(host='localhost',user='root',password='123456',port=3306,db='spiders',charset=' utf8')
  1. 最基本的参数是host,user,password和port,必须要有。剩下两个参数根据你自己的情况决定是否使用。
  2. host指的是mysql服务器安装在哪里,由于我的mysql就是安装在本机上,因此这里可以写localhost,我也可以写成主机名或者主机ip。
  3. db指的是你要操作的是哪一个数据库,在进行数据库连接的时候,最好加上这个参数。

3)一个简单的热身案例

# 导包
import pymysql 
# 使用pymysql连接上mysql数据库服务器,创建了一个数据库对象;
db = pymysql.connect(host='localhost',user='root', password='123456',
     port=3306, db='huangwei', charset='utf8')
# 开启mysql的游标功能,创建一个游标对象;    
cursor = db.cursor()
# 要执行的SQL语句;
sql = "select * from student"
# 使用游标对象执行SQL语句;
cursor.execute(sql)
# 使用fetchone()方法,获取返回的结果,但是需要用变量保存返回结果;
data = cursor.fetchone()
print(data)
# 断开数据库的连接,释放资源;
db.close()

结果如下:

python与mysql数据库交互的实现

3、cursor游标对象的一些常用方法

1)cursor用来执行命令的方法

  1. execute(query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数;
  2. executemany(query, args):执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数;

2)cursor用来接收返回值的方法

  1. fetchone():返回一条结果行;
  2. fetchmany(size):接收size条返回结果行。如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据;
  3. fetchall():接收全部的返回结果行;

4、创建表

import pymysql 
db = pymysql.connect(host='localhost',user='root', password='123456',port=3306, db='huangwei', charset='utf8')

# 创建一个游标对象;
cursor = db.cursor()
 
# 建表语句;
sql = """
  create table person(
   id int auto_increment primary key not null,
   name varchar(10) not null,
   age int not null
  )charset=utf8
  """

# 执行sql语句;
cursor.execute(sql)
 
# 断开数据库的连接;
db.close()

注意:你在mysql中sql语句怎么写,在这里就怎么写。还有一个细节需要注意的是,在python中,将代码进行多次换行的时候,最好使用“三引号”。

5、查询数据…查

1)fetchone():一次获取一条记录

import pymysql
 
db = pymysql.connect(host='localhost',user='root',db='huangwei',password='123456',port=3306,charset='utf8')
      
cursor = db.cursor()

cursor.execute('select count(*) from person')
aa = cursor.fetchone()
print(aa)
cursor.execute('select name,age from person') 
for i in range(aa[0]):
 a,b = cursor.fetchone()
 c = "我的名字叫{},今年{}岁".format(a,b)
 display(c)
db.close()

结果如下:

python与mysql数据库交互的实现

2)fetchall():一次获取所有记录

import pymysql
 
db = pymysql.connect(host='localhost',user='root',db='huangwei',password='123456',port=3306,charset='utf8')
      
cursor = db.cursor()

cursor.execute('select name,age from person')
aa = cursor.fetchall()
# print(aa)
for a,b in aa:
 c = "我的名字叫{},今年{}岁".format(a,b)
 display(c)
db.close()

结果如下:

python与mysql数据库交互的实现

注:还有一个fetchmany()方法,用于一次性获取指定条数的记录,请自行下去研究。

3)使用pandas中的read_sql()方法,将提取到的数据直接转化为DataFrame进行操作

import pymysql 
import pandas as pd

db = pymysql.connect(host='localhost',user='root',db='huangwei',password='123456',port=3306,charset='utf8')
cursor = db.cursor()

df1 = pd.read_sql("select * from student where ssex='男'",db)
display(df1)

df2 = pd.read_sql("select * from student where ssex='女'",db)
display(df2)

结果如下:

python与mysql数据库交互的实现

6、插入数据…增

1)一次性插入一条数据

import pymysql

db = pymysql.connect(host='localhost',user='root', password='123456',port=3306, db='huangwei', charset='utf8')
 
cursor = db.cursor()
 
# mysql中SQL语句怎么写,这里就怎么写;
name = "猪八戒"
age = 8000
sql = 'insert into person(name,age) values ("猪八戒",8000)'

try:
 cursor.execute(sql)
 db.commit()
 print("插入成功")
except:
 print("插入失败")
 db.rollback()
db.close()

1.1)一次性插入一条数据

import pymysql
 
db = pymysql.connect(host='localhost',user='root', password='123456',port=3306, db='huangwei', charset='utf8')
 
cursor = db.cursor()
 
# 插入数据
sql = 'insert into person(name,age) values(%s,%s)'
try:
 cursor.execute(sql,('孙悟空',100000))
 db.commit()
 print("插入成功")
except:
 print("插入失败")
 db.rollback()
db.close()

2)一次性插入多条数据

import pymysql
 
db = pymysql.connect(host='localhost',user='root', password='123456',port=3306, db='huangwei', charset='utf8')
 
cursor = db.cursor()
 
# 插入数据
sql = 'insert into person(name,age) values(%s,%s)'
# 注意:(('牛魔王',9000),('铁扇公主',8000),('玉皇大帝',6000))也可以,小括号都可以换为中括号
datas = [('牛魔王',9000),('铁扇公主',8000),('玉皇大帝',6000)]
try:
 cursor.executemany(sql,datas)
 db.commit()
 print("插入成功")
except:
 print("插入失败")
 db.rollback()
db.close()

总结如下:

① pymysql模块是默认开启mysql的事务功能的,因此,进行 “增” “删” "改"的时候,一定要使用db.commit()提交事务,否则就看不见所插入的数据。

② 进行 “增”、“删”、"改"的时候,一定要使用try…except…语句,因为万一没插入成功,其余代码都无法执行。当语句执行不成功,我们就db.rollback()回滚到操作之前的状态;当语句执行成功,我们就db.commit()提交事务。

7、更新数据…改

import pymysql
 
db = pymysql.connect(host='localhost',user='root', password='123456',port=3306, db='huangwei', charset='utf8')
 
cursor = db.cursor()
 
# 更新数据
sql = 'update person set age=%s where name=%s'
try:
 cursor.execute(sql,[90000,"玉皇大帝"])
 db.commit()
 print("更新成功")
except:
 print("更新失败")
 db.rollback()
db.close()

8、删除数据…删

import pymysql
 
db = pymysql.connect(host='localhost',user='root', password='123456',port=3306, db='huangwei', charset='utf8')
 
cursor = db.cursor()
 
# 删除数据
sql = 'delete from person where age=8000'
try:
 cursor.execute(sql)
 db.commit()
 print("删除成功")
except:
 print("删除失败")
 db.rollback()
db.close()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用pil生成缩略图的方法
Mar 26 Python
在Python的Django框架中调用方法和处理无效变量
Jul 15 Python
50行Python代码实现人脸检测功能
Jan 23 Python
python爬虫之模拟登陆csdn的实例代码
May 18 Python
python内置数据类型之列表操作
Nov 12 Python
Django之Mode的外键自关联和引用未定义的Model方法
Dec 15 Python
python抓取网页内容并进行语音播报的方法
Dec 24 Python
Python3获取拉勾网招聘信息的方法实例
Apr 03 Python
django3.02模板中的超链接配置实例代码
Feb 04 Python
Python 使用 PyQt5 开发的关机小工具分享
Jul 16 Python
python 爬取免费简历模板网站的示例
Sep 27 Python
pytest配置文件pytest.ini的详细使用
Apr 17 Python
win10系统下python3安装及pip换源和使用教程
Jan 06 #Python
基于python实现文件加密功能
Jan 06 #Python
Pytorch 实现冻结指定卷积层的参数
Jan 06 #Python
如何使用python实现模拟鼠标点击
Jan 06 #Python
pytorch 实现查看网络中的参数
Jan 06 #Python
Python3 虚拟开发环境搭建过程(图文详解)
Jan 06 #Python
Pytorch根据layers的name冻结训练方式
Jan 06 #Python
You might like
PHP下MAIL的另一解决方案
2006/10/09 PHP
在yii中新增一个用户验证的方法详解
2013/06/20 PHP
PHP中对于浮点型的数据需要用不同的方法解决
2014/03/11 PHP
PHP连接SQLServer2005的方法
2015/01/27 PHP
PHP贪婪算法解决0-1背包问题实例分析
2015/03/23 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
解密效果
2006/06/23 Javascript
永不消失的title提示代码
2007/02/15 Javascript
发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser
2007/11/30 Javascript
学习ExtJS form布局
2009/10/08 Javascript
javascript cookies 设置、读取、删除实例代码
2010/04/12 Javascript
10道典型的JavaScript面试题
2017/03/22 Javascript
基于jQuery使用Ajax动态执行模糊查询功能
2018/07/05 jQuery
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
JS数组中对象去重操作示例
2019/06/04 Javascript
Vue基础配置讲解
2019/11/29 Javascript
微信小程序跨页面传递data数据方法解析
2019/12/13 Javascript
解决微信授权成功后点击按返回键出现空白页和报错的问题
2020/06/08 Javascript
[48:48]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Dream TIME
2014/05/21 DOTA
python复制文件代码实现
2013/12/23 Python
Python多线程编程(一):threading模块综述
2015/04/05 Python
安装好Pycharm后如何配置Python解释器简易教程
2019/06/28 Python
python 控制Asterisk AMI接口外呼电话的例子
2019/08/08 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
2019/10/23 Python
python编写计算器功能
2019/10/25 Python
Django 404、500页面全局配置知识点详解
2020/03/10 Python
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
Beauty Expert美国/加拿大:购买奢侈美容产品
2018/12/05 全球购物
医务人员竞聘职务自我评价分享
2013/11/08 职场文书
食品科学与工程专业毕业生求职信范文
2014/07/21 职场文书
教师党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
导游词之镇江西津古渡
2019/11/06 职场文书
浅谈MySQL之浅入深出页原理
2021/06/23 MySQL
python库sklearn常用操作
2021/08/23 Python
node快速搭建后台的实现步骤
2022/02/18 NodeJs
Java死锁的排查
2022/05/11 Java/Android