zoukankan      html  css  js  c++  java
  • Python 连接MySQL数据库之pymysql模块使用

    PyMySQL介绍

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

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

    PyMySQL安装

    pip install pymysql

    连接数据库

    注意事项

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

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

    基本使用

    import pymysql
    # 去数据库里面判断用户名和密码是否正确
    # 1. 连接数据库
    conn = pymysql.connect(
        host="localhost",
        port=3306,  # 端口号是数字类型
        database="userinfo",  # 写自己本地的数据库名字
        user="root",
        password="123456",
        charset="utf8"   # 千万记得没有-
    )
    
    cursor = conn.cursor()  # 获取输入SQL语句的光标对象
    # 得到一个可以执行SQL语句并且将结果作为字典返回的游标
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    sql = "select * from info;" ret = cursor.execute(sql) print(ret)
    # 关闭连接
    cursor.close()
    conn.close()

    注意:

    charset=“utf8”,编码不要写成"utf-8"

    # 导入pymysql模块
    import pymysql
    # 连接database
    conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
    # 得到一个可以执行SQL语句的光标对象
    cursor = conn.cursor()
    # 得到一个可以执行SQL语句并且将结果作为字典返回的游标
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    # 定义要执行的SQL语句 
    sql
    = """ CREATE TABLE USER1 (
    id INT auto_increment PRIMARY KEY ,
    name CHAR(
    10) NOT NULL UNIQUE,
    age TINYINT NOT NULL
    )ENGINE
    =innodb DEFAULT CHARSET=utf8; """

    # 执行SQL语句
    cursor.execute(sql)
    # 关闭光标对象
    cursor.close()
    # 关闭数据库连接
    conn.close()
    import pymysql
    
    username = input("输入用户名:")
    pwd = input("请输入密码:")
    
    # if username == "erge" and pwd == "dashabi":
    #     print("登陆成功!")
    # else:
    #     print("滚~")
    
    # 拿到用户输入的用户名密码
    
    # 去数据库里面判断用户名和密码是否正确
    # 1. 连接数据库
    conn = pymysql.connect(
        host="localhost",
        port=3306,  # 端口号是数字类型
        database="userinfo",  # 写自己本地的数据库名字
        user="root",
        password="123456",
        charset="utf8"   # 千万记得没有-
    )
    
    cursor = conn.cursor()  # 获取输入SQL语句的光标对象
    sql = "select * from info;"
    ret = cursor.execute(sql)
    print(ret)
    # 关闭连接
    cursor.close()
    conn.close()
    
    # 2. 判断 --> 只需要把检索条件写到sql语句中,去数据库执行就可以了
    
    # with open("userinfo.txt", "r", encoding="utf-8") as f:
    #     for line in f:
    #         # print(line.strip())
    #         u, p = line.strip().split("|")
    #         if u == username and p == pwd:
    #             print("登陆成功!")
    #             break
    #     else:
    #         print("go out~")
    文件与数据库的登陆验证比较

    增删改查操作

    # 导入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()

    插入数据要失败回滚

    import pymysql
    
    conn = pymysql.connect(
        host="localhost",
        port=3306,
        database="userinfo",
        user="root",
        password="123456",
        charset="utf8"
    )
    
    cursor = conn.cursor()
    
    # 拼接语句
    sql = "insert into info (username, password)VALUES (%s, %s)"
    # 执行
    try:
        cursor.execute(sql, ["大旭",])
        conn.commit()
    except Exception as e:
        print("报错啦:",str(e))
        conn.rollback()  # 回滚
    # 对数据库做写操作一定要记得提交password
    
    cursor.close()
    conn.close()

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

    import pymysql
    
    conn = pymysql.connect(
        host="localhost",
        port=3306,
        database="userinfo",
        user="root",
        password="123456",
        charset="utf8"
    )
    
    cursor = conn.cursor()
    # 创建班级的sql语句
    sql1 = "insert into class (name) VALUES (%s)"
    # 创建学生的sql语句
    sql2 = "insert into student (name, cid) VALUES (%s, %s)"
    
    
    cursor.execute(sql1, "全栈9期")
    new_id = cursor.lastrowid  # 获取刚插入数据的ID值
    cursor.execute(sql2, ["小东北", new_id])
    
    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);"
    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")

    注意:

    fetchall,fetchmany,fetchone,scroll(+-1,mode='''relative,absolute') 的取值移动都取决于光标的位置。

  • 相关阅读:
    2017.12.16 扫雷小游戏未完成
    2017.12.15 计算机算法分析与设计 枚举
    2017.12.14 Java实现-----图书管理系统
    2017.12.13 Java中是怎样通过类名,创建一个这个类的数组
    2017.12.12 基于类的面向对象和基于原型的面向对象方式比较
    2017.12.11 String 类中常用的方法
    2017.12.10 Java写一个杨辉三角(二维数组的应用)
    2017.12.9 Java中的排序---冒泡排序、快速排序、选择排序
    spring boot compiler 版本实践
    spring boot 首次请求Controller慢
  • 原文地址:https://www.cnblogs.com/olivia2018/p/8620019.html
Copyright © 2011-2022 走看看