zoukankan      html  css  js  c++  java
  • MySQL之pymysql模块

    PyMySQL介绍

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

    Django中也可以使用PyMySQL连接MySQL数据库。

    PyMySQL安装

    pip install pymysql

    连接数据库

    注意事项

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

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

    基本使用

    import pymysql
    
    #s链接数据库
    conn = pymysql.connect(
        host = '127.0.0.1',  #被连接数据库的ip地址
        port = 3306,         #数据库服务端端口号
        user = 'root',       #用户名
        password = '123456', #密码
        database = 'db1',    #选择库
        charset = 'utf8'     #编码格式
    )
    
    #拿到执行sql语句的游标
    cur = conn.cursor()
    
    # 如果想要字典格式的查询结果,可以设置cursor属性,这样返回的就是一个字典形式的结果,key值为字段名,value为值
    # cur_dic = conn.cursor(cursor=pymysql.cursors.DictCursor)
    
    #查询语句
    select_sql = 'select * from auth'
    
    #执行sql语句
    cur.execute(select_sql)
    
    #获取单条查询结果
    # res1 = cur.fetchone()
    
    #获取指定行数的查询结果
    # res2 = cur.fetchmany(3)
    
    #获取全部查询结果
    res3 = cur.fetchall()
    
    #输出查询结果
    #注意,如果有多条获取查询的语句,游标会从上一次的位置开始查询
    #比如说如果有两条 cur.fetchall()   那么第二次查询结果为空
    #可以用cur.scroll()方法来控制游标
    # cur.scroll(n,mode='absolute')  移动到绝对位置 n
    # cur.scroll(n,mode='relative')  移动到相对位置 n
    print(res3)
    
    #插入语句
    #可以直接写插入的值,也可以用%s来占位,然后传参
    insert_sql = 'insert into auth (name,age,address) values (%s,%s,%s)'
    
    #传入参数的时候用元组或者列表来装插入值
    cur.execute(insert_sql,('auth1',18,'北京'))
    
    #如果要传多个参数值
    cur.executemany(insert_sql,[('auth2',19,'北京'),('auth3',20,'北京')])
    
    #提交数据
    conn.commit()
    
    #关闭游标
    cur.close()
    
    #关闭链接
    conn.close()
    

      

    返回字典格式数据:

    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

    增删改查操作

    # 导入pymysql模块
    import pymysql
    # 连接database
    conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
    # 得到一个可以执行SQL语句的光标对象
    cursor = conn.cursor()
    sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);"
    username = "Alex"
    age = 18
    # 执行SQL语句
    cursor.execute(sql, [username, age])
    # 提交事务
    conn.commit()
    cursor.close()
    conn.close()
    

      

    插入数据失败回滚

    # 导入pymysql模块
    import pymysql
    # 连接database
    conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
    # 得到一个可以执行SQL语句的光标对象
    cursor = conn.cursor()
    sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);"
    username = "Alex"
    age = 18
    try:
        # 执行SQL语句
        cursor.execute(sql, [username, age])
        # 提交事务
        conn.commit()
    except Exception as e:
        # 有异常,回滚事务
        conn.rollback()
    cursor.close()
    conn.close()
    

      

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

    # 导入pymysql模块
    import pymysql
    # 连接database
    conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
    # 得到一个可以执行SQL语句的光标对象
    cursor = conn.cursor()
    sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);"
    username = "Alex"
    age = 18
    try:
        # 执行SQL语句
        cursor.execute(sql, [username, age])
        # 提交事务
        conn.commit()
        # 提交之后,获取刚插入的数据的ID
        last_id = cursor.lastrowid
    except Exception as e:
        # 有异常,回滚事务
        conn.rollback()
    cursor.close()
    conn.close()
    

      

    批量执行

    # 导入pymysql模块
    import pymysql
    # 连接database
    conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
    # 得到一个可以执行SQL语句的光标对象
    cursor = conn.cursor()
    sql = "INSERT INTO USER1(name, age) VALUES (%s, %s);"
    data = [("Alex", 18), ("Egon", 20), ("Yuan", 21)]
    try:
        # 批量执行多条插入SQL语句
        cursor.executemany(sql, data)
        # 提交事务
        conn.commit()
    except Exception as e:
        # 有异常,回滚事务
        conn.rollback()
    cursor.close()
    conn.close()
    

      

    # 导入pymysql模块
    import pymysql
    # 连接database
    conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
    # 得到一个可以执行SQL语句的光标对象
    cursor = conn.cursor()
    sql = "DELETE FROM USER1 WHERE id=%s;"
    try:
        cursor.execute(sql, [4])
        # 提交事务
        conn.commit()
    except Exception as e:
        # 有异常,回滚事务
        conn.rollback()
    cursor.close()
    conn.close()
    

      

    # 导入pymysql模块
    import pymysql
    # 连接database
    conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
    # 得到一个可以执行SQL语句的光标对象
    cursor = conn.cursor()
    # 修改数据的SQL语句
    sql = "UPDATE USER1 SET age=%s WHERE name=%s;"
    username = "Alex"
    age = 80
    try:
        # 执行SQL语句
        cursor.execute(sql, [age, username])
        # 提交事务
        conn.commit()
    except Exception as e:
        # 有异常,回滚事务
        conn.rollback()
    cursor.close()
    conn.close()
    

      

    查询单条数据

    # 导入pymysql模块
    import pymysql
    # 连接database
    conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
    # 得到一个可以执行SQL语句的光标对象
    cursor = conn.cursor()
    # 查询数据的SQL语句
    sql = "SELECT id,name,age from USER1 WHERE id=1;"
    # 执行SQL语句
    cursor.execute(sql)
    # 获取单条查询数据
    ret = cursor.fetchone()
    cursor.close()
    conn.close()
    # 打印下查询结果
    print(ret)
    

      

    查询多条数据

    # 导入pymysql模块
    import pymysql
    # 连接database
    conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
    # 得到一个可以执行SQL语句的光标对象
    cursor = conn.cursor()
    # 查询数据的SQL语句
    sql = "SELECT id,name,age from USER1;"
    # 执行SQL语句
    cursor.execute(sql)
    # 获取多条查询数据
    ret = cursor.fetchall()
    cursor.close()
    conn.close()
    # 打印下查询结果
    print(ret)
    

      

     进阶用法

    # 可以获取指定数量的数据
    cursor.fetchmany(3)
    # 光标按绝对位置移动1
    cursor.scroll(1, mode="absolute")
    # 光标按照相对位置(当前位置)移动1
    cursor.scroll(1, mode="relative")
     
     
  • 相关阅读:
    109 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 03 新增功能及实现 05 问题解析--通过一个方法完成学生和专业的双向关联
    108 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 03 新增功能及实现 04 问题解析--数组未实例化造成的空指针异常
    107 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 03 新增功能及实现 03 编写方法完成学生个数统计功能
    106 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 03 新增功能及实现 02 新增属性完成学生信息存储
    105 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 03 新增功能及实现 01 新增需求及分析
    session与cookie的区别和联系
    session和cookie的区别
    Web服务器主动推送技术
    webSocket的场景应用
    TCP、Http和Socket 优劣比较
  • 原文地址:https://www.cnblogs.com/fu-yong/p/8504596.html
Copyright © 2011-2022 走看看