栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

PyMySQL

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PyMySQL

PyMySQL

安装PyMySQL创建数据库表插入操作查询操作

封装查询 更新操作删除操作

PyMySQL是从Python连接到MySQL数据库服务器的接口。 它实现了Python数据库API v2.0,并包含一个纯Python的MySQL客户端库

安装PyMySQL
pip install PyMySQL
若下载速度慢,可使用国内镜像源
pip install PyMySQL -i https://pypi.tuna.tsinghua.edu.cn/simple

安装成功后,测试是否能连接上数据库

import pymysql

# 创建链接,连接数据库(服务器地址、端口号、用户名、密码、数据库名称、编码格式)
conn = pymysql.connect(host="192.168.134.1",
                       port=3306,
                       user='root',
                       passwd='123456',
                       db='testdb',
                       charset='utf8')

# 使用cursor()方法获取一个游标(查询数据返回为元组格式)
cursor = conn.cursor()

# 执行sql语句中查询版本信息的方法
sql = '''SELECt VERSION(); '''
cursor.execute(sql)

# 查询所有数据,返回数据为元组格式
data = cursor.fetchall()

# 关闭游标
cursor.close()

# 关闭链接
conn.close()

print("数据库版本为:{}".format(data))
打印结果
数据库版本为:(('10.3.27-MariaDB-0+deb10u1',),)

【注意】:sql语句结尾最好带上;

创建数据库表
import pymysql

# 创建连接
conn = pymysql.connect(host="192.168.134.1",
                       port=3306,
                       user='root',
                       passwd='123456',
                       db='testdb',
                       charset='utf8')

# 创建游标
cursor = conn.cursor()

# 若表存在则删除
cursor.execute("DROP TABLE IF EXISTS users")

# 准备建表的语句
sql = """CREATE TABLE users(
  id int(10) NOT NULL AUTO_INCREMENT,
  phonenum int(20) NOT NULL,
  nickname char(20) DEFAULT NULL,
  sex char(1) DEFAULT NULL,
  birth_year int(4) DEFAULT NULL,
  birth_month int(2) DEFAULT NULL,
  birth_day int(2) DEFAULT NULL,
  avatar char(10) DEFAULT NULL,
  location char(10) DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;"""
#执行sql语句
cursor.execute(sql)


# 关闭游标
cursor.close()

# 关闭连接
conn.close()

插入操作

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

import pymysql

# 创建连接
conn = pymysql.connect(host="192.168.134.1",
                       port=3306,
                       user='root',
                       passwd='123456',
                       db='testdb',
                       charset='utf8')

# 创建游标
cursor = conn.cursor()

# 准备sql语句
sql = """INSERT INTO users(phonenum,nickname, sex, birth_year,birth_month,birth_day,avatar,location)
   VALUES (13766665555,'bobo',1,1998,5,27,'00','gz')"""
try:
   # 执行sql语句
   cursor.execute(sql)
   # 提交事务
   conn.commit()
except:
   # 若出现错误,则回滚
   conn.rollback()


# 关闭游标
cursor.close()

# 关闭连接
conn.close()
查询操作

在建立数据库连接后,就可以对此数据库进行查询了。 可以使用fetchone()方法获取单条记录或fetchall()方法从数据库表中获取多个值。

fetchone() 获取查询结果集的下一行。 结果集是当前使用游标对象来查询表时返回的对象。

fetchmany(n) 获取查询结果集的下n行。 结果集是当前使用游标对象来查询表时返回的对象。

fetchall() 获取结果集中的所有行。 如果已经从结果集中提取了一些行,则从结果集中检索剩余的行。

users 表内容

游标在初始位置,可通过fetchall() 获取结果集中的所有行

import pymysql

# 创建连接
conn = pymysql.connect(host="192.168.134.1",
                       port=3306,
                       user='root',
                       passwd='123456',
                       db='testdb',
                       charset='utf8')

# 创建游标(查询数据返回为元组格式)
cursor = conn.cursor()

# 1. 执行SQL,进行查询操作
sql1= '''SELECT * FROM users WHERe sex =1 ; '''

effect_row1 = cursor.execute(sql1)

# 2. 展示查询的所有数据,返回数据为元组格式
result1 = cursor.fetchall()

# 关闭游标
cursor.close()

# 关闭连接
conn.close()

print(result1)

# 打印结果
'''
(
(1, '13766665555', 'bobo', 1, 1998, 5, 27, '00', 'gz'),
(3, '13744443333', 'mingming', 1, 1999, 2, 3, '02', 'sh'), 
(5, '13722221111', 'hanghang', 1, 1999, 4, 4, '00', 'gz'), 
(6, '17311112222', 'zhanzhan', 1, 2000, 3, 3, '02', 'sh')
)
'''

游标在初始位置,可通过fetchone() 获取查询结果集的第一行

import pymysql

# 创建连接
conn = pymysql.connect(host="192.168.134.1",
                       port=3306,
                       user='root',
                       passwd='123456',
                       db='testdb',
                       charset='utf8')


# 创建游标(查询数据返回为字典格式)
cursor = conn.cursor(pymysql.cursors.DictCursor)

# 1. 执行SQL,进行查询操作
sql1= '''SELECt * FROM users WHERe sex =1 ; '''

effect_row1 = cursor.execute(sql1)

# 2. 仅展示查询数据的第一条
result1 = cursor.fetchone()

# 关闭游标
cursor.close()

# 关闭连接
conn.close()

print(result1)

# 打印结果
'''
{'id': 1, 'phonenum': '13766665555', 'nickname': 'bobo', 'sex': 1,
'birth_year': 1998, 'birth_month': 5, 'birth_day': 27, 'avatar': '00', 'location': 'gz'}
'''

**【拓展】:**对于数据库中的数据,查询出来后为了方便进行处理,可转化为字典格式,通过key-value的方式获取需要的数据

通过fetchone() 获取数据时,游标在初始位置,所以fetchone() 获取的数据是查询集中的第一条数据;

通过fetchmany(2) 获取数据时,游标在初始位置的下一行,所以fetchmany(2) 获取的数据是查询集中的第二条和第三条数据;

通过fetchall() 获取数据时,游标也发生了移动,此时测试集中仅剩一条数据,所以fetchall() 获取的数据是查询集中的最后一条数据(第四条);

import pymysql

# 创建连接
conn = pymysql.connect(host="192.168.134.1",
                       port=3306,
                       user='root',
                       passwd='123456',
                       db='testdb',
                       charset='utf8')


# 创建游标(查询数据返回为元组格式)
cursor = conn.cursor()

# 1. 执行SQL
sql1= '''SELECt * FROM users WHERe sex =1 ; '''

effect_row1 = cursor.execute(sql1)

# 2. 返回数据
result1 = cursor.fetchone()
result2 = cursor.fetchmany(2)
result3 = cursor.fetchall()

# 关闭游标
cursor.close()

# 关闭连接
conn.close()

print(result1)
print(result2)
print(result3)

# 打印结果
'''
result1
(1, '13766665555', 'bobo', 1, 1998, 5, 27, '00', 'gz')

result2
(
(3, '13744443333', 'mingming', 1, 1999, 2, 3, '02', 'sh'), 
(5, '13722221111', 'hanghang', 1, 1999, 4, 4, '00', 'gz')
)


result3
(
(6, '17311112222', 'zhanzhan', 1, 2000, 3, 3, '02', 'sh'),
)
'''
封装查询

对于数据库中的数据,查询操作是最常用的操作,在接口自动化测试项目中,经常会要查询数据库中的数据,这里简单封装一下查询操作

import pymysql
from pymysql.cursors import DictCursor


class MysqlUtil:

    def __init__(self,return_dict=False):
        # 配置数据库
        self.coon = pymysql.connect(
            host="192.168.174.132",
            port=3306,
            user='bobo',
            passwd='hh123456',
            db='swiper',
            charset='utf8'
        )
        # self.cursor = self.coon.cursor(DictCursor)
        if return_dict:
            self.cursor = self.coon.cursor(pymysql.cursors.DictCursor)  # 指定每行数据以字典的形式返回
        else:
            self.cursor = self.coon.cursor()  # 指定每行数据以元祖的形式返回

    def close(self):
        self.cursor.close()  # 关闭查询
        self.coon.close()  # 关闭连接

	# 查询一条数据
    def fetch_one(self, sql):
        # 执行SQL
        self.cursor.execute(sql)
        # 获取结果
        result = self.cursor.fetchone()  # 返回元祖()/ 返回字典 {}
        return result  # 返回结果

	# 查询多条数据
    def fetch_all(self, sql):
        # 执行SQL
        self.cursor.execute(sql)
        # 获取结果
        results = self.cursor.fetchall()  # 返回列表 [(),()...] / [{},{}...]
        return results




if __name__ == '__main__':
    mysql = MysqlUtil(return_dict=True)
    sql = "select * from users where phonenum ='13766665555';"
    result = mysql.fetch_one(sql)
    print(result["birth_day"])
    # 注意一定要关闭
    mysql.close()

# 打印结果 27 
更新操作

UPDATe 语句可对任何数据库中的数据进行更新操作,它可用于更新数据库中已有的一个或多个记录。

import pymysql

# 创建连接
conn = pymysql.connect(host="192.168.134.1",
                       port=3306,
                       user='root',
                       passwd='123456',
                       db='testdb',
                       charset='utf8')

# 创建游标
cursor = conn.cursor()

# 准备sql语句(将sex=0的人的出生年份+1)
sql = "UPDATE users SET birth_year = birth_year + 1 WHERe SEX = '%c'" % ('0')

try:
   # 执行sql语句
   cursor.execute(sql)
   # 提交事务
   conn.commit()
except:
   # 若出现错误,则回滚
   conn.rollback()


# 关闭游标
cursor.close()

# 关闭连接
conn.close()
删除操作

当要从数据库中删除一些记录时,那么可以执行DELETE操作。

import pymysql

# 创建连接
conn = pymysql.connect(host="192.168.134.1",
                       port=3306,
                       user='root',
                       passwd='123456',
                       db='testdb',
                       charset='utf8')

# 创建游标
cursor = conn.cursor()

# 准备sql语句(将birth_year 在2000年后的人删除)
sql = "DELETE FROM users  WHERe birth_year > '%d'" % (2000)

try:
   # 执行sql语句
   cursor.execute(sql)
   # 提交事务
   conn.commit()
except:
   # 若出现错误,则回滚
   conn.rollback()


# 关闭游标
cursor.close()

# 关闭连接
conn.close()
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/757011.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号