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

    pymysql模块

    安装

    pip install pymysql
    

    一 链接、执行,关闭(游标)

    import pymysql
    
    # 链接
    conn = pymysql.connect(
        host='127.0.0.1',
        user='root',
        port=3306,
        password='123123',
        db='day36',
        charset='utf8',)
    # 游标
    # cursor = conn.cursor()  #执行完毕返回的结果默认以元组显示
    
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    # cursor=pymysql.cursors.DictCursor 将查询出来的结果制作成字典的形式返回
    
    # 执行sql语句
    sql = "select * from teacher"
    res = cursor.execute(sql)  # 执行sql语句,返回sql查询成功的记录数目
    # print(cursor.fetchone())   # 只获取查询结果中的一条数据
    # print(cursor.fetchmany(2))   #指定获取几条数据,如果数字超了也不会报错
    # print(cursor.fetchall()) #获取查询结果的所有数据
    
    #相对移动
    # cursor.scroll(2,'relative')  #基于指针所在的位置,往后偏移
    # print(cursor.fetchall())
    #绝对移动
    cursor.scroll(1,'absolute')
    print(cursor.fetchall())
    
    cursor.close()
    conn.close()
    
    

    二 excute() 注入

    SQL注入是一种注入攻击,可以执行恶意SQL语句

    注意:符号 -- 会注释掉它之后的sql,正确的语法: -- 后至少有一个任意字符

    根本原理:就根据程序的字符串拼接 name = '%s',我么输入一个xxx - - haha,用我们输入的xxx加'在程序中拼接成一个判断条件name = 'xxx' - -haha

    1、sql注入之:用户存在,绕过密码
    leti' -– 任意字符

    2、sql注入之:用户不存在,绕过用户与密码
    xxx' or 1=1 -– 任意字符

    import pymysql
    
    # 链接
    conn = pymysql.connect(
        host='127.0.0.1',
        user='root',
        port=3306,
        password='123123',
        db='day36',
        charset='utf8',)
    # 游标
    # cursor = conn.cursor()  #执行完毕返回的结果默认以元组显示
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    # cursor=pymysql.cursors.DictCursor 将查询出来的结果制作成字典的形式返回
    
    username = input("username>>>:").strip()
    password = input("password>>>:").strip()
    
    # 执行sql语句
    sql = "select * from userinfo where name='%s' and password='%s'"%(username,password)
    print(sql)
    # cursor.execute(sql,(username,password))
    cursor.execute(sql,)
    res = cursor.fetchall()
    
    if res:
        print(res)
    else:
        print('username or password error!')
    
    cursor.close()
    conn.close()
    
    


    解决方法:

    # 原来是我们对sql进行字符串拼接
    # sql = "select * from userinfo where name='%s' and password='%s'"(username,password)
    # print(sql)
    # res=cursor.execute(sql)
    
    #改写为(execute帮我们做字符串拼接,我们无需且一定不能再为%s加引号了)
    sql = "select * from userinfo where name=%s and password='%s" #
    !!!注意%s需要去掉引号,因为pymysql会自动为我们加上
    cursor.execute(sql,(username,password)) #pymysql模块自动帮我们解决sql注入的问题,只要我们按照pymysql的规矩来。
    

    三 增、删、改:conn.commit()

    autocommit = True  #自动提交
    
    # 链接
    conn = pymysql.connect(
        host='127.0.0.1',
        user='root',
        port=3306,
        password='123123',
        db='day36',
        charset='utf8',
        autocommit=True)
    
    #增
    sql = "insert into userinfo(name,password) values('so','123456');"
    res = cursor.execute(sql)
    
    #删
    sql = 'delete from userinfo where name="so"'
    res = cursor.execute(sql)
    
    #改
    sql = 'update userinfo set name="666" where password="123456"'
    res = cursor.execute(sql)
    

    针对增 删 改操作 执行重要程度偏高

    conn.commit()

  • 相关阅读:
    初识分布式计算:从MapReduce到Yarn&Fuxi
    日志的艺术(The art of logging)
    关于负载均衡的一切:总结与思考
    打印中文dict list的各种姿势
    不想再被鄙视?那就看进来! 一文搞懂Python2字符编码
    什么是分布式系统,如何学习分布式系统
    再论分布式事务:从理论到实践
    从银行转账失败到分布式事务:总结与思考
    git命令
    IntelliJ idea 中使用Git
  • 原文地址:https://www.cnblogs.com/kai-/p/12050639.html
Copyright © 2011-2022 走看看