• pymysql


    关于pymysql

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

    安装:

    pip install pymysql

    注意:

    在进行本文以下内容之前需要注意:
      • 你有一个MySQL数据库,并且已经启动。
      • 你有可以连接该数据库的用户名和密码
      • 你有一个有权限操作的database

    连接数据库:

    方式一:(有bug)

    import pymysql
    
    inputName = input('name:')
    inputPwd = input('pwd:')
    
    # 连接database
    conn = pymysql.connect(host="localhost", database="db1", user="root", password="123456", charset="utf8")
    
    cursor = conn.cursor()  # 得到一个可以执行SQL语句的光标对象
    
    sql = "select * from userinfo where name='%s' and pwd = '%s';" % (inputName, inputPwd)      # '%s'这个引号要带上
    print(sql)
    
    ret = cursor.execute(sql)  # 执行SQL语句
    
    cursor.close()  # 关闭光标
    conn.close()  # 关闭数据库连接
    
    if ret:
        print('登录成功')
    else:
        print('登录失败')
    View Code

    运行:

    第一种情况:
    输入:
        name:   zhou' -- kitty12322343          # 相当于把后面的都给注释了
        pwd:    abcd
    输出:
        select * from userinfo where name='zhou' -- kitty12322343' and pwd = 'abcd';
        登录成功
    
    第二种情况:
    输入:
        name:kitty' or 1=1 -- haha          # 1=1就是True
        pwd:abcd
    输出:
        select * from userinfo where name='kitty' or 1=1 -- haha' and pwd = 'abcd';
        登录成功
    View Code

    正确的链接数据库姿势:

    import pymysql
    
    inputName = input('name:')
    inputPwd = input('pwd:')
    
    # 连接database
    conn = pymysql.connect(host="localhost", database="db1", user="root", password="123456", charset="utf8")
    
    cursor = conn.cursor()  # 得到一个可以执行SQL语句的光标对象
    
    sql = "select * from userinfo where name=%s and pwd=%s;"        # %s也不用加引号了
    print(sql)
    
    ret = cursor.execute(sql, [inputName, inputPwd])  # 执行SQL语句         # 通过这种方式传参数,就没有bug了
    
    ============================
    字典方式:
    cursor.execute("select * from userinfo where name=%(user)s and pwd=(pwd)%s;" , {'user'='zhou', 'pwd'='123'} )
    ============================
    
    cursor.close()  # 关闭光标
    conn.close()  # 关闭数据库连接
    
    if ret:
        print('登录成功')
    else:
        print('登录失败')

    增删改查操作

    1、增

    # 导入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 = "zhou"
    age = 18
    # 执行SQL语句
    cursor.execute(sql, [username, age])
    # 提交事务
    conn.commit()
    cursor.close()
    conn.close()

    插入数据失败回滚:
    -------------- conn.rollback()

    # 导入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 = "zhou"
    age = 18
    try:
        # 执行SQL语句
        cursor.execute(sql, [username, age])
        # 提交事务
        conn.commit()
    except Exception as e:
        # 有异常,回滚事务
        conn.rollback()
    cursor.close()
    conn.close()

    批量执行操作:
    -------------executemany()

    # 导入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 = [("zhou", 18), ("zhi", 20), ("long", 21)]
    try:
        # 批量执行多条插入SQL语句
        cursor.executemany(sql, data)
        # 提交事务
        conn.commit()
    except Exception as e:
        # 有异常,回滚事务
        conn.rollback()
    cursor.close()
    conn.close()

    获取插入数据的ID(关联表格操作时会用到)
    ------------- cursor.lastrowid

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

    2、删

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

    3、改

    # 导入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 = "kitty"
    age = 88
    try:
        # 执行SQL语句
        cursor.execute(sql, [age, username])
        # 提交事务
        conn.commit()
    except Exception as e:
        # 有异常,回滚事务
        conn.rollback()
    cursor.close()
    conn.close()

    4、查

    查询单条数据:

    # 导入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)                          # (1, 'zhou', '123456')   从光标开始处,拿到一条数据,拿到数据后,光标向下移动一行

    查询多条数据:

    # 导入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.fetctmany(3)                 # 从光标开始处,拿到3条数据, 拿到数据后,光标向下移动3行
    
    # 光标按绝对位置移动1                                绝对定位:从0开始移动光标
    cursor.scroll(1, mode="absolute")             只能是: 正数
    
    # 光标按照相对位置(当前位置)移动1             相对定位:相对于当前光标位置      (默认)
    cursor.scroll(1, mode="relative")               正数:向下       负数:向上

    示例:

    import pymysql
    inputName = input('name:')
    inputPwd = input('pwd:')
    conn = pymysql.connect(host="localhost", database="db1", user="root", password="123456", charset="utf8")
    cursor = conn.cursor()  # 得到一个可以执行SQL语句的光标对象
    
    sql = "select * from userinfo;"
    cursor.execute(sql)
    ret1 = cursor.fetchmany(3)              # 取2个,光标位置准备取第3条数据
    cursor.scroll(1,mode='absolute')        
    ret2 = cursor.fetchone()                    # 光标绝对移动,从0开始移动,所以取第2条数据
    
    cursor.close()  # 关闭光标
    conn.close()  # 关闭数据库连接
    print(ret1)      # ((1, 'zhou', '123456'), (2, 'long', '123456')), (3, 'zhi', '123456'))
    print(ret2)      # (2, 'long', '123456')
  • 相关阅读:
    [MSSQL]也说SQL中显示星期几函数
    ECMAScript旮里旮旯儿一(galigalaoer)
    [MSQL]RANK函数
    敏捷背后的理论
    敏捷软件开发 Agile software Development
    第三章 WebGL资源 WebGL Resources
    第一章 WebGL简介 Introduction
    [MSSQL]PIVOT函数
    《Javascript高级程序设计》读书笔记 Number对象
    visual studio 2010 冷门技巧分享
  • 原文地址:https://www.cnblogs.com/zhzhlong/p/9301648.html
Copyright © 2020-2023  润新知