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()

  • 相关阅读:
    poj 2763 Housewife Wind
    hdu 3966 Aragorn's Story
    poj 1655 Balancing Act 求树的重心
    有上下界的网络流问题
    URAL 1277 Cops and Thieves 最小割 无向图点带权点连通度
    ZOJ 2532 Internship 网络流求关键边
    ZOJ 2760 How Many Shortest Path 最大流+floyd求最短路
    SGU 438 The Glorious Karlutka River =) 拆点+动态流+最大流
    怎么样仿写已知网址的网页?
    5-10 公路村村通 (30分)
  • 原文地址:https://www.cnblogs.com/kai-/p/12050639.html
Copyright © 2011-2022 走看看