4000字,详解 Python 操作 MySQL 数据库!

0dffd885d33f2df512164c2a14e15d1a.gif

作者 | 黄伟呢

出品 | 数据分析与统计学之美

本文的重点,就是教会大家,如何用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游标对象

021919862008bfc5797dab5a1e9179a3.png

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]))

819f94a87491cf2d0686b0071815dbd2.gif

d271efcdfaf14b2766ecbb102ea2c660.png

资讯

AI 考古比胡八一更高效

资讯

这个机器狗引起网友争议!

资讯

阿里发布云芯片倚天710

资讯

英特尔开源编程工具 ControFlag

9cd2044eecce84f038a7942b76bdb18d.png

分享

0b1d1ab38bfba1eef8e4c4216081f5a7.png

点收藏

e8709a3f8fe3466f34385aece3a150cd.png

点点赞

65d27d68d2d74c2af745ca48c30c6e3a.png

点在看

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值