前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python3 MySQL 数据库连接 - PyMySQL 驱动

Python3 MySQL 数据库连接 - PyMySQL 驱动

作者头像
十二惊惶
发布2024-02-28 20:25:09
1570
发布2024-02-28 20:25:09
举报

Python3 MySQL 数据库连接 - PyMySQL 驱动

[TOC]

PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2 中则使用 mysqldb

准备要求:mysql8.0以上版本及python3.0以上版本。

使用PyMySQL链接数据库

实例: 链接 Mysql 的 testdb 数据库:

代码语言:javascript
复制
#!/usr/bin/python3
import pymysql
# 打开数据库连接
db = pymysql.connect(host='localhost',user='root',password='123456',database='testdb')
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用 execute()  方法执行 SQL 查询
cursor.execute("SELECT VERSION()")
# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()
print("Database version : %s " % data)
# 关闭数据库连接
db.close()

pymysql.connect()连接数据库函数

pymysql.Connect()参数说明

host(str)

MySQL服务器地址

port(int)

MySQL服务器端口号

user(str)

用户名

passwd(str)

密码

db(str)

数据库名称

charset(str)

连接编码

connection对象:

使用pymysql.Connect()生成的是一个connection对象,Connection对象也称为数据库连接对象,Connection对象的功能是负责对数据源的连接。

其功能包括:获取游标 cursor()commit()提交当前事务,rollback()回滚当前事务,close()关闭连接。

cursor():获取游标

要想操作数据库,光连接数据是不够的,必须拿到操作数据库的游标,才能进行后续的操作,比如读取数据、添加数据。通过获取到的数据库连接实例conn下的cursor()方法来创建游标。游标用来接收返回结果

cursor返回一个游标实例对象,其中包含了很多操作数据的方法

execute(op)

执行一个数据库的查询命令

fetchone()

取得结果集的下一行

fetchmany(size)

获取结果集的下几行

fetchall()

获取结果集中的所有行

rowcount()

返回数据条数或影响行数

close()

关闭游标对象

对数据库的各种操作

创建类操作:

创建数据库
代码语言:javascript
复制
import pymysql
#打开数据库连接,不需要指定数据库,因为需要创建数据库
conn = pymysql.connect('localhost',user = "root",passwd = "123456")
#获取游标
cursor=conn.cursor()
#创建pythonBD数据库
cursor.execute('CREATE DATABASE IF NOT EXISTS pythonDB DEFAULT CHARSET utf8 COLLATE utf8_general_ci;')
cursor.close()#先关闭游标
conn.close()#再关闭数据库连接
print('创建pythonBD数据库成功')
创建数据库表

建立数据库连接后,可以使用创建的游标的execute()方法将数据库表或记录创建到数据库表中。

代码语言:javascript
复制
import pymysql
#打开数据库连接
conn = pymysql.connect(host="localhost",user = "root",passwd = "28283860",db = "pythondb")
#获取游标
cursor=conn.cursor()
print(cursor)
#创建user表
cursor.execute('drop table if exists user')
sql="""CREATE TABLE IF NOT EXISTS `user` (
	  `id` int(11) NOT NULL AUTO_INCREMENT,
	  `name` varchar(255) NOT NULL,
	  `age` int(11) NOT NULL,
	  PRIMARY KEY (`id`)
	) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0"""

cursor.execute(sql)
cursor.close()#先关闭游标
conn.close()#再关闭数据库连接
print('创建数据表成功')

插入操作:

当要将记录创建到数据库表中时,需要执行INSERT操作。

插入单条数据:

代码语言:javascript
复制
import pymysql
#打开数据库连接,不指定数据库
conn=pymysql.connect(host='localhost',user='root',password='28283860')
conn.select_db('pythondb')

cur=conn.cursor()#获取游标
#创建user表
cur.execute('drop table if exists user')
sql="""CREATE TABLE IF NOT EXISTS `user` (
	  `id` int(11) NOT NULL AUTO_INCREMENT,
	  `name` varchar(255) NOT NULL,
	  `age` int(11) NOT NULL,
	  PRIMARY KEY (`id`)
	) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0"""

cur.execute(sql)

insert=cur.execute("insert into user values(1,'tom',18)")
print('添加语句受影响的行数:',insert)

#另一种插入数据的方式,通过字符串传入值
sql="insert into user values(%s,%s,%s)"
cur.execute(sql,(3,'kongsh',20))
cur.close()
conn.commit()
conn.close()
print('sql执行成功')

select_db(“数据库名”) 可以用这种方式在数据库连接建立后指定数据库

插入多条数据:

代码语言:javascript
复制
import pymysql
#打开数据库连接,同时指定数据库
conn=pymysql.connect(host='localhost',user='root',password='28283860',database='pythondb')
cur=conn.cursor()#获取游标
#另一种插入数据的方式,通过字符串传入值
sql="insert into user values(%s,%s,%s)"
insert=cur.executemany(sql,[(4,'wen',20),(5,'tom',10),(6,'test',30)])
print ('批量插入返回受影响的行数:',insert)
cur.close()
conn.commit()
conn.close()
print('sql执行成功')

注意:批量插入多条sql语句采用的是executemany(sql,args)函数,返回受影响的行数。args参数是一个包含多个元组的列表,每个元组对应一条mysql中的一条数据。这里的%s不需要加引号,否则插入数据的数据会类型错误

查询操作:

使用execute()函数得到的只是受影响的行数,并不能真正拿到查询的内容。cursor对象还提供了3种提取数据的方法:fetchone、fetchmany、fetchall.。每个方法都会导致游标动,所以必须注意游标的位置。 cursor.fetchone():获取游标所在处的一行数据,返回元组,没有返回None cursor.fetchmany(size):接受size行返回结果行。如果size大于返回的结果行的数量,则会返回cursor.arraysize条数据。 cursor. fetchall():接收全部的返回结果行。

代码语言:javascript
复制
import pymysql
#打开数据库连接
conn=pymysql.connect(host='localhost',user='root',password='28283860',database='pythondb')
#获取游标
cur=conn.cursor()

cur.execute("select * from user;")
while 1:
    res=cur.fetchone()
    if res is None:
        #表示已经取完结果集
        break
    print (res)
cur.close()
conn.commit()
conn.close()
print('sql执行成功')

注意:从execute()函数的查询结果中取数据,以元组的形式返回游标所在处的一条数据,如果游标所在处没有数据,将返回空元组,该数据执行一次,游标向下移动一个位置。fetchone()函数必须跟exceute()函数结合使用,并且在exceute()函数之后使用

代码语言:javascript
复制
#fetchone()函数实例:
import pymysql
#打开数据库连接
conn=pymysql.connect(host='localhost',user='root',password='28283860')
conn.select_db('pythondb')
#获取游标
cur=conn.cursor()
cur.execute("select * from user")
#取3条数据
resTuple=cur.fetchmany(3)
print(type(resTuple))
for res in resTuple:
    print(res)

cur.close()
conn.commit()
conn.close()
print('sql执行成功')

注意:从exceute()函数结果中获取游标所在处的size条数据,并以元组的形式返回,元组的每一个元素都也是一个由一行数据组成的元组,如果size大于有效的结果行数,将会返回cursor.arraysize条数据,但如果游标所在处没有数据,将返回空元组。查询几条数据,游标将会向下移动几个位置。fetmany()函数必须跟exceute()函数结合使用,并且在exceute()函数之后使用

代码语言:javascript
复制
import pymysql
#打开数据库连接
conn=pymysql.connect(host='localhost',user='root',password='28283860')
conn.select_db('pythondb')
#获取游标
cur=conn.cursor()
cur.execute("select * from user")
#取所有数据
resTuple=cur.fetchall()
print(type(resTuple))
print ('共%d条数据'%len(resTuple))
cur.close()
conn.commit()
conn.close()
print('sql执行成功')

注意:获取游标所在处开始及以下所有的数据,并以元组的形式返回,元组的每一个元素都也是一个由一行数据组成的元组,如果游标所在处没有数据,将返回空元组。执行完这个方法后,游标将移动到数据库表的最后

更新操作:

单条数据更新操作:
代码语言:javascript
复制
#打开数据库连接
conn=pymysql.connect(host='localhost',user='root',password='28283860')
conn.select_db('pythondb')
#获取游标
cur=conn.cursor()
#更新一条数据
update=cur.execute("update user set age=100 where name='kongsh'")
print ('修改后受影响的行数为:',update)
#查询一条数据
cur.execute('select * from user where name="kongsh";')
print(cur.fetchone())
cur.close()
conn.commit()
conn.close()
print('sql执行成功')
多条数据更新操作:
代码语言:javascript
复制
import pymysql
conn=pymysql.connect(host='localhost',user='root',password='28283860')#打开数据库连接
conn.select_db('pythondb')#获取游标
cur=conn.cursor()
cur.execute("select * from user where name in ('kongsh','wen');")#更新前查询所有数据
print('更新前的数据为:')
for res in cur.fetchall():
      print (res)
print ('*'*40)#更新2条数据
sql="update user set age=%s where name=%s"
update=cur.executemany(sql,[(15,'kongsh'),(18,'wen')])
#更新2条数据后查询所有数据
cur.execute("select * from user where name in ('kongsh','wen');")
print('更新后的数据为:')
for res in cur.fetchall():
      print (res)
cur.close()
conn.commit()
conn.close()
print('sql执行成功')

删除数据:

删除单条数据:
代码语言:javascript
复制
import pymysql
#打开数据库连接
conn=pymysql.connect(host='localhost',user='root',password='28283860')#打开数据库连接
conn.select_db('pythondb')#获取游标
cur=conn.cursor()
cur.execute("select * from user;")#删除前查询所有数据
print('删除前的数据为:')
for res in cur.fetchall():
      print (res)
print ('*'*40)      
cur.execute("delete from user where id=1")#删除1条数据
#删除后查询所有数据
cur.execute("select * from user;")
print('删除后的数据为:')
for res in cur.fetchall():
      print (res)
cur.close()
conn.commit()
conn.close()
print('sql执行成功')
删除多条数据:
代码语言:javascript
复制
import pymysql
#打开数据库连接
conn=pymysql.connect(host='localhost',user='root',password='28283860')
conn.select_db('pythondb')
cur=conn.cursor()#获取游标
cur.execute("select * from user;")#删除前查询所有数据
print('删除前的数据为:')
for res in cur.fetchall():
      print (res)
print ('*'*40)#删除2条数据
sql="delete from user where id=%s"
cur.executemany(sql,[(3),(4)])
cur.execute("select * from user;")#删除后查询所有数据
print('删除后的数据为:')
for res in cur.fetchall():
      print (res)
cur.close()
conn.commit()
conn.close()
print('sql执行成功')

事务回滚

代码语言:javascript
复制
import pymysql
conn=pymysql.connect(host='localhost',user='root',password='28283860')#打开数据库连接
conn.select_db('pythondb')
cur=conn.cursor()#获取游标
cur.execute("select * from user;")#修改前查询所有数据
print('修改前的数据为:')
for res in cur.fetchall():
      print (res)
print ('*'*40)
cur.execute("update user set name='xiaoxiaoxiaoxiaoren' where id=5")#更新表中第1条数据
cur.execute("select * from user;")#修改后查询所有数据
print('修改后的数据为:')
for res in cur.fetchall():
      print (res)
print ('*'*40)
conn.rollback()#回滚事务
cur.execute("select * from user;")
print('回滚事务后的数据为:')
for res in cur.fetchall():
      print (res)
cur.close()
conn.commit()
conn.close()
print('sql执行成功')
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Python3 MySQL 数据库连接 - PyMySQL 驱动
    • 使用PyMySQL链接数据库
      • pymysql.connect()连接数据库函数
      • cursor():获取游标
    • 对数据库的各种操作
      • 创建类操作:
      • 插入操作:
      • 查询操作:
      • 更新操作:
      • 删除数据:
      • 事务回滚
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档