【python】(十八)python常用第三方库——pymysql


1. pymysql 概述

  • Python 的数据库接口标准是 Python DB-API
  • PyMySQL 是从 Python 连接到 MySQL 数据库服务器的接口
  • PyMySQL 的目标是成为 MySQLdb 的替代品
  • 官方文档:http://pymysql.readthedocs.io/

2. pymysql 安装

  • 使用 pip 安装

    pip install pymysql

  • 使用 Pycharm 界面安装

3. pymysql 连接数据库

3.1 pymysql 连接数据库

  • host:MySQL 服务器地址
  • user:用户名
  • password:密码
  • database:数据库名称
  • charset:编码方式,推荐使用 utf8mb4
# 1.导入库
import pymysql

# 2.建立连接
conn = pymysql.connect(host='服务器地址',
                     user='用户名',
                     password='密码',
                     database='数据库名',
                     charset="utf8mb4")
# 3.关闭连接
conn.close()

3.2 封装获取连接的函数

由于mysql的连接操作使用比较频繁,所以可以封装成一个数据库连接函数,并放置在__init__.py中。

#__init__.py

import pymysql

# 1.封装建立连接的对象
def get_conn():
    conn = pymysql.connect(
        host="服务器地址",
        user="root",
        password="123456",
        database="数据库名",
        charset="utf8mb4"
    )

    return conn

4. pymysql 入门实例

  1. 获取连接对象
    1. 打开
    2. 关闭
  2. 获取游标对象
    1. 执行 SQL
    2. 查询记录
from st_pymysql import get_conn

def demo():
    # 1.获取连接对象
    conn = get_conn()
    # 2.获取游标对象
    cursor = conn.cursor()
    # 3.执行SQL
    cursor.execute("SELECT VERSION()")
    # 4.查询结果
    version = cursor.fetchone()
    print(f"数据库的版本是:{version}")
    # 5.关闭连接
    conn.close()

if __name__ == '__main__':
    demo()


实际操作时,使用ip地址访问数据库报错:host ‘‘ is not allowed to connect to this mysql server

解决办法:在终端中按照以下步骤输入命令:

  1. mysql -u root -p;

    说明:根据自己的用户名来输入正确的用户,此处我的用户是root

  2. use mysql;

  3. select t.host from user t where t.user=‘root’;

    查看mysql.user 中 root用户的host是什么,可以不用执行

  4. update user set host = ‘%’ where user = ‘root’;

  5. FLUSH PRIVILEGES;

    说明:是修改在不重启mysql服务的情况下立即生效。

5. pymysql 数据库操作

5.1 CRUD 操作

5.1.1 创建表

创建表 testcase

from st_pymysql import get_conn

def createtable_demo():
    conn = get_conn()  # 获取连接
    cursor = conn.cursor()  # 获取游标

    sql = """
        CREATE TABLE `testcase` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `title` varchar(255) COLLATE utf8_bin NOT NULL,
        `expect` varchar(255) COLLATE utf8_bin NOT NULL,
        `owner` varchar(255) COLLATE utf8_bin NOT NULL,
        PRIMARY KEY (`id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
        """
    cursor.execute(sql)  # 执行SQL
    conn.close()  # 关闭连接

if __name__ == '__main__':
    createtable_demo()

创建结果:
在这里插入图片描述

5.1.2 插入记录

from st_pymysql import get_conn

def insert_demo():
    conn = get_conn()  # 获取连接
    cursor = conn.cursor()  # 获取游标

    sql = """INSERT INTO testcase
        (id, title, expect, owner)
        values (1, 'S11总决赛', '冠军', 'EDG');
        """
    cursor.execute(sql)  # 执行SQL
    conn.commit()  # 提交

if __name__ == '__main__':
    insert_demo()

执行前:表中没有数据
在这里插入图片描述

执行后:
在这里插入图片描述

5.1.3 查询记录

查询操作:

  • fetchone():获取单条记录
  • fetchmany(n):获取 n 条记录
  • fetchall():获取所有结果记录
import sys

from st_pymysql import get_conn

def demo():
    conn = get_conn()  # 获取连接
    cursor = conn.cursor()  # 获取游标
    sql = "SELECT * FROM testcase;"
    # 捕获异常
    try:
        cursor.execute(sql)  # 执行SQL
        record = cursor.fetchone()  # 查询记录
        print(record)
    except Exception as e:
        print(sys.exc_info())  # 打印错误信息
    finally:
        conn.close()  # 关闭连接

if __name__ == '__main__':
    demo()
  
"""
执行结果:
(1, 'S11总决赛', '冠军', 'EDG')
"""

5.2 执行事务

  • 提交:commit

    向数据库发出信号,完成变更,并且在操作后不再进行其他更改。

  • 回滚:rollback

    对一个或者多个的变更不满意,可以使用回滚还原回去。

  • try-catch-finally

from st_pymysql import get_conn

def demo():
    conn = get_conn()  # 获取连接
    cursor = conn.cursor()  # 获取游标

    sql = """INSERT INTO testcase
        (id, title, expect, owner)
        values (2, 'S11全球总决赛', '冠军', 'EDG');
        """
    try:
        cursor.execute(sql)  # 执行SQL
        conn.commit()  # 提交事务
    except:
        conn.rollback()  # 回滚事务
    finally:
        conn.close()  # 关闭连接

if __name__ == '__main__':
    demo()

运行结果:
在这里插入图片描述

5.2.1 更新记录

更新数据表的数据

from st_pymysql import get_conn

def demo():
    conn = get_conn()
    cursor = conn.cursor()
    sql = "UPDATE testcase SET owner='hogwarts' WHERE id=2;"
    try:
        cursor.execute(sql)  # 执行SQL
        conn.commit()  # 提交事务
    except:
        conn.rollback()  # 回滚事务
    finally:
        conn.close()  # 关闭连接

if __name__ == '__main__':
    demo()

运行结果:
在这里插入图片描述

5.2.2 删除记录

删除数据表的数据

from st_pymysql import get_conn

def demo():
    conn = get_conn()  # 获取连接
    cursor = conn.cursor()  # 获取游标
    sql = "DELETE FROM testcase WHERE id=3;"
    try:
        cursor.execute(sql)  # 执行SQL
        conn.commit()  # 提交事务
    except:
        conn.rollback()  # 回滚事务
    finally:
        conn.close()  # 关闭连接

if __name__ == '__main__':
    demo()

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值