• pymysql


    pymysql

    pymysql 是 Python 中操作MYSQL 的模块,其使用方法和MySQLdb 几乎相同。

    下载安装:pip install pymysql

    连接数据库

    注意事项

    在进行以下内容之前需要注意:

    • 你有一个MySQL数据库,并且已经启动
    • 你有可以连接该数据库的用户名和密码
    • 你有一个有权限操作的 database

    基本使用

    # 导入 pymysql 模块
    import pymysql
    
    # 创建链接
    conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8")
    
    # 创建光标
    cu = conn.cursor()
    
    # 要执行的 SQL 语句
    sql = "insert into s8(username, password) VALUE (%s, %s);"
    
    # 执行 SQL 语句,并接收受影响的行数
    ret = cu.execute(sql, ("xiaoming", "123"))
    
    # 将数据提交到数据库,否则数据就没有添加到表中
    conn.commit()
    
    # 关闭光标
    cu.close()
    
    # 断开链接
    conn.close()
    
    # 打印受影响的行数
    print(ret)  # 结果 1

    增删改查操作

    1、增

    # 导入pymysql 模块
    import pymysql
    
    # 连接 database
    conn = pymysql.connect(host="你的数据库地址", user="用户名", password="密码", database="数据库名", charset="uft8")
    
    # 得到一个可以执行SQL语句的光标对象
    cursor = conn.cursor()
    
    # 要执行的SQL语句
    sql = "insert into s8(username, password) VALUES (%s, %s);"
    
    name = "Alex"
    pwd = "123"
    
    # 执行SQL语句
    cursor.execute(sql,[name, pwd])  # 这里的第二个参数必须是元组或者列表的形式
    
    # 提交事务   在对表中的记录做增、删、改的时候必须要提交事务,否则所做动作无效
    conn.commit()
    
    # 释放光标
    cursor.close()
    
    # 断开链接
    conn.close()

    当数据插入失败的时候进行回滚

    # 当插入数据失败的时候进行回滚操作
    # 导入模块
    import pymysql
    # 链接database
    conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8")
    # 得到一个可以执行SQL语句的光标对象
    cursor = conn.cursor()
    # 将要执行的SQL语句
    sql = "insert into s8(username,password) VALUES (%s,%s);"
    # 判断数据插入操作是否成功,若没有成功,则使用回滚操作
    try:
        # 执行SQL语句
        cursor.execute(sql,["xiaoming", "678"])
        # 提交事务
        conn.commit()
        # 如果不成功,则执行以下代码
    except Exception as e:
        conn.rollback()
    
    # 释放光标
    cursor.close()
    # 断开连接
    conn.close()

    获取插入数据的ID(关联的时候会用到)

    # 当插入数据失败的时候进行回滚操作
    # 导入模块
    import pymysql
    
    # 链接database
    conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8")
    # 得到一个可以执行SQL语句的光标对象
    cursor = conn.cursor()
    # 将要执行的SQL语句
    sql = "insert into s8(username,password) VALUES (%s,%s);"
    # 判断数据插入操作是否成功,若没有成功,则使用回滚操作
    try:
        # 执行SQL语句
        cursor.execute(sql, ["xiaoming", "678"])
        # 提交事务
        conn.commit()
        # 提交之后获取刚刚插入的数据的ID
        last_jilu_id = cursor.lastrowid
        # 如果不成功,则执行以下代码
    except Exception as e:
        conn.rollback()
    
    # 释放光标
    cursor.close()
    # 断开连接
    conn.close()

    批量执行操作

    # 批量执行
    # 导入模块
    import pymysql
    
    # 链接database
    conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8")
    # 得到一个可以执行SQL语句的光标对象
    cursor = conn.cursor()
    # 将要执行的SQL语句
    sql = "insert into s8 (username,password) VALUES (%s,%s);"
    data = [("xiaohong","123"),("xiaoming", "123"),("xiaolan","123")]
    # 判断数据插入操作是否成功,若没有成功,则使用回滚操作
    try:
        # 执行SQL语句
        cursor.executemany(sql, data)
        # 提交事务
        conn.commit()
        # 如果不成功,则执行以下代码
    except Exception as e:
        conn.rollback()
        print(e)
    # 释放光标
    cursor.close()
    # 断开连接
    conn.close()

    2、删除(也可以进行批量操作)

    # 删除操作
    # 导入模块
    import pymysql
    
    # 链接database
    conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8")
    # 得到一个可以执行SQL语句的光标对象
    cursor = conn.cursor()
    # 将要执行的SQL语句
    sql = "delete from s8 where username = %s;"
    # 判断数据插入操作是否成功,若没有成功,则使用回滚操作
    try:
        # 执行SQL语句
        cursor.execute(sql, ("xiaohong",))
        # 提交事务
        conn.commit()
        # 如果不成功,则执行以下代码
    except Exception as e:
        conn.rollback()
        print(e)
    # 释放光标
    cursor.close()
    # 断开连接
    conn.close()

    3、修改(这里写的是批量操作的例子)

    # 删除操作
    # 导入模块
    import pymysql
    
    # 链接database
    conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8")
    # 得到一个可以执行SQL语句的光标对象
    cursor = conn.cursor()
    # 将要执行的SQL语句
    sql = "update s8 set username=%s where username=%s;"
    # 判断数据插入操作是否成功,若没有成功,则使用回滚操作
    data = [("xh", "xiaohong"), ("xm", "xiaoming"), ("xl", "xiaolan")]
    try:
        # 执行SQL语句
        cursor.executemany(sql, data)
        # 提交事务
        conn.commit()
        # 如果不成功,则执行以下代码
    except Exception as e:
        conn.rollback()
        print(e)
    # 释放光标
    cursor.close()
    # 断开连接
    conn.close()

    4、查询操作

    查询单条数据

    # 导入模块
    import pymysql
    
    # 链接database
    conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8")
    # 得到一个可以执行SQL语句的光标对象
    cursor = conn.cursor()
    # 将要执行的SQL语句
    sql = "select * from s8 where id>1;"
    # 执行SQL语句
    cursor.execute(sql)
    # 获取查询到的单条数据
    ret = cursor.fetchone()
    # 释放光标
    cursor.close()
    # 断开连接
    conn.close()
    print(ret)

    查询多条数据

    # 导入模块
    import pymysql
    
    # 链接database
    conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8")
    # 得到一个可以执行SQL语句的光标对象
    cursor = conn.cursor()
    # 将要执行的SQL语句
    sql = "select * from s8 where id>1;"
    
    # 执行SQL语句
    cursor.execute(sql)
    # 获取查询到的多条数据
    ret = cursor.fetchmany(5)
    # 查询所有的记录,但是之前使用多条数据查询的时候光标已经移到了id=52之后,此时是从id=53开始查询的
    after_all = cursor.fetchall()
    # 释放光标
    cursor.close()
    # 断开连接
    conn.close()
    print(ret)
    print(after_all)

    进阶用法

    # 使用 fetchmany(num) 可以获取指定数量的数据
    # 例如:
              cursor.fetchmany(4)
    # 光标按绝对位置移动
        # 1、absolute
            cursor.scroll(1,mode="absolute")
        # 2、relative
            cursor.scroll(-3,mode="relative")
    
    # absolute 中的第一个参数指的是相对于查询条件查询的结果来移动光标的。当参数为0时,光标指向的是查询结果的第0位的位置,这个参数不能为负值
    # relative 中的第一个参数指的是相对于当前位置来移动光标,可以为负数
  • 相关阅读:
    设置 nextjs build 时,忽略 page 目录下相关文件
    Resource Override 之调试线上 js
    nodejs npm 基础命令
    禁止选择或禁止复制网页数据
    对上传的图片进行格式校验以及安全性校验
    docker 设置阿里云镜像加速
    JS 格式化输出时间
    dotnet core 实现 IActionResult
    win10 visual studio 设置默认管理员权限启动
    Windows 环境部署 RabbitMQ
  • 原文地址:https://www.cnblogs.com/hzhcdhm/p/8260442.html
Copyright © 2020-2023  润新知