4000字,详解Python操作MySQL数据库!
杰哥的IT之旅
共 4229字,需浏览 9分钟
· 2021-10-29
作者 | 黄伟呢
出品 | 数据分析与统计学之美
本文的重点,就是教会大家,如何用Python来操作MySQL数据库。
1. 通用步骤
其实,这里有一个通用步骤,都是写死了的,大家照做就行。
# 1. 导入相关库
import pymysql
# 2. 链接MySQL服务器
db = pymysql.connect(host='localhost' , user='root' , password='******' , port=3306 ,db='spiders' , charset='utf8')
# 3. 创建一个cursor游标对象
cursor = db.cursor()
# 4. 在这一步写你的sql语句
sql = 'select version()'
# 5. 执行sql语句
cursor.execute(sql)
# 6. 断开连接
db.close()
可以看出,整个过程就是第四步那里不同。归根到底,其实就是写sql。
2. 需要特别说明的知识点
Ⅰ 各参数说明
db = pymysql.connect(host='localhost' , user='root' , password='******' , port=3306 ,db='spiders' , charset='utf8')
这一行代码很长,里面涉及到好几个参数,这里为大家一一介绍如下:
参数 1 :mysql 服务器所在的主机 IP
参数 2 :用户名;
参数 3 :密码;
参数 4 :连接的 mysql 主机的端口,默认是 3306;
参数 5 :连接的数据库名;
参数 6 :通信采用的编码方式,默认是'gb2312',要求与数据库创建时指定的编码一致,否则中文会乱码;
Ⅱ cursor游标对象
3. Python增删改查操作
创建一个数据表
import pymysql
db = pymysql.connect(host='192.168.3.47' , user='root',password='******' , port=3306 , db='spiders' , charset='utf8')
cursor = db.cursor()
# 检查表是否存在,如果存在删除
cursor.execute('drop table if exists students')
# 创建表
sql = 'create table students(id int auto_increment primary key not null,name varchar(10) not null,age int not null)'
cursor.execute(sql)
db.close()
注:以后用代码创建表的机会并不多,表一般都是我们提前创建好的。
插入数据
import pymysql
db = pymysql.connect(host='192.168.3.47' , user='root',password='******' , port=3306 , db='spiders' , charset='utf8')
cursor = db.cursor()
# 插入数据
sql = 'insert into students(name,age) values(%s,%s)'
try:
cursor.execute(sql,('孙悟空',100000))
db.commit()
except:print("插入失败")
db.rollback()
db.close()
注 1:插入数据一定要用 try…except…语句,因为万一没插入成功,其余代码都无法执行。
注 2:import pymysql,此模块是默认开启mysql的事务功能的,因此,进行“增”、“删”、“改”的时候,一定要使用db.commit()提交事务,否则就看不见所插入的数据。
更新数据
import pymysql
db = pymysql.connect(host='192.168.3.47' , user='root',password='******' , port=3306 , db='spiders' , charset='utf8')
cursor = db.cursor()
# 更新数据
sql = 'update students set age =%s where name=%s'
try:
cursor.execute(sql,(30,"郭卫华"))
db.commit()
except:
print("插入失败")
db.rollback()
db.close()
删除操作
import pymysql
db = pymysql.connect(host='192.168.3.47' , user='root',password='******' , port=3306 , db='spiders' , charset='utf8')
cursor = db.cursor()
# 删除数据
sql = 'delete from students where age=100000'
try:
cursor.execute(sql)
db.commit()
except:
print("插入失败")
db.rollback()
db.close()
查询操作
fetchone()功能:获取下一个查询结果集,结果集是一个对象。
fetchall()功能:接收全部返回的行。
import pymysql
db = pymysql.connect(host='192.168.3.47' , user='root',password='******' , port=3306 , db='spiders' , charset='utf8')
cursor = db.cursor()
# 查询数据
sql = 'select * from students where age>60'
try:
cursor.execute(sql)
reslist = cursor.fetchall()
for row in reslist:
print(“%d--%d” %(row[0],row[1],… row[n]))
except:
print("插入失败")
db.rollback()
db.close()
4. 封装一个类
# 注:把下面类写在 studentsql 文件中
import pymysql
class StudentsSql():
def __init__(self,host,user,port,dbname,charset):
self.host = host
self.user = user
self.port = port
self.dbname = dbname
self.charset = charset
def connet(sef):
self.db = pymysql.connect(self.host, self.user, self.port,
self.dbname, self.charset)
def close(self):
self.cursor.close()
self.db.close()
def get_one(self,sql):
res = None
try:
self.connect()
self.cursor.execute(sql)
res = self.cursor.fetchone()
self.close()
except:
print(“查询失败”)
return res
def get_all(self,sql):
res = None
try:
self.connect()
self.cursor.execute(sql)
res = self.cursor.fetchall()
self.close()
except:
print(“查询失败”)
return res
def inset(self,sql):
return self.__edit(sql)
def update(self,sql):
return self.__edit(sql)
def delete(self,sql):
return self.__edit(sql)
def __edit(self,sql):
count = 0
try:
self.connect()
count = self.cursor.execute(sql)
self.db.commit()
self.close()
except:
print(“事务提交失败”)
self.db.rollback()
return count
上述类封装成功,以后只需要调用即可。
from studentsql import StudentsSql
s = StudentsSql(“host='192.168.3.47' , user='root', password='******' , port=3306 , db='spiders' , charset='utf8'”)
res = s.get_all('select * from students where age>60')
for row in res:
print(“%d--%d” %(row[0],row[1],… row[n]))
近期原创
评论
金融研究 | 使用Python测量关键审计事项的「信息含量」
Tips: 公众号推送后内容只能更改一次,且只能改20字符。如果内容出问题,或者想更新内容, 只能重复推送。为了更好的阅读体验,建议阅读本文博客版, 链接地址https://textdata.cn/blog/2023-01-13-information-content-of-critical-aud
大邓和他的Python
0
金融研究(更新) | 使用Python构建关键审计事项的「信息含量」
Tips: 公众号推送后内容只能更改一次,且只能改20字符。如果内容出问题,或者想更新内容, 只能重复推送。为了更好的阅读体验,建议阅读本文博客版, 链接地址https://textdata.cn/blog/2023-01-13-information-content-of-critical-aud
大邓和他的Python
0
盘点Lombok的几个骚操作,你绝对没用过!
👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 2.0 版本完结啦, 演示链接:http://116.62.199.48/ ,新项目正在酝酿中
小哈学Java
0
谷歌员工爆料 Python 基础团队原地解散
转自 | 机器之心编辑 | 蛋酱什么?谷歌解雇了整个 Python 基础团队?「当与你直接共事的每个人,包括你的主管,都被裁员 —— 哦,是职位被削减,而你被要求安排他们的替代者入职,这些人被告知在不同的国家担任同样的职位,但他们并不为此感到高兴,这是很艰难的一天。」发布这一动态的 Tho
机器学习算法与Python实战
0
我发现 Lombok的几个骚操作,哈哈好用
大家好,我是小富~前言本文不讨论对错,只讲骚操作。有的方法看看就好,知道可以这么用,但是否应用到实际开发中,那就仁者见仁,智者见智了。一万个读者就会有一万个哈姆雷特,希望这篇文章能够给您带来一些思考。耐心看完,你一定会有所收获。@onX例如 onConstructor, oMet
程序员内点事
0
光纤详解:光纤跳线如何分类,多向单模转换?
本文来自“光纤详解:光纤跳线如何分类,多向单模转换?”,光纤跳线作为光网络布线最基础的元件之一,被广泛应用于光纤链路的搭建中。如今,光纤制造商根据应用场景的不同推出众多类型的光纤跳线,如MPO/LC/SC/FC/ST光纤跳线,单工/双工光纤跳线,单模/多模光纤跳线等,它们之间各有特色,且不可替代。本
架构师技术联盟
0
五一抢票难,Github上这几个Python项目,你可以试试
又到五一长假啦(虽然其实就放了1天),大家是打算家里蹲or出去玩,又或者是在公司加班呢...今天给大家介绍三个和12306相关的项目,看看你是否用得上。/01/ py12306py12306购票助手,顾名思义,12306买票的~需要在python 3.6以上版本运行程序。1. 安装依赖gi
Crossin的编程教室
0
谷歌员工爆料Python基础团队原地解散
机器之心报道编辑:蛋酱什么?谷歌解雇了整个 Python 基础团队?「当与你直接共事的每个人,包括你的主管,都被裁员 —— 哦,是职位被削减,而你被要求安排他们的替代者入职,这些人被告知在不同的国家担任同样的职位,但他们并不为此感到高兴,这是很艰难的一天。」发布这一动态的 Thomas Wouter
机器学习初学者
0