zoukankan      html  css  js  c++  java
  • day38 python操作mysql ,防注入问题,

    用python操作MySql

    import pymysql
    
    conn = pymysql.connect(
        host = '127.0.0.1',
        port = 3306,
        user = 'root',
        password = '123',
        database = 'db4',
        charset = 'utf8',
    )
    cursor =conn.cursor(pymysql.cursors.DictCursor)
    # 产生一个游标对象 以字典的形式返回结果 键是表的字段 值是字段对应的信息
    sql = 'select * from emp'
    # 要执行的sql 语句
    cursor.execute(sql)
    # 提交信息
    print(cursor.fetchone())
    # 只获取一条数据
    print(cursor.fetchone())
    print(cursor.fetchone())
    # 只获取一条数据
    # print(cursor.fetchall())
    # 获取所有的数据  返回的结果是一个列表
    # print(cursor.fetchmany(6))
    # 获取多条数据  返回的结果是一个列表
    
    cursor.scroll(5,'absolute')
    # 控制光标移动   absolute相对于在起始位置 往后移动
    # cursor.scroll(5,'relative')
    # relative相对于从当前位置往后移动几位
    print(cursor.fetchall())
    View Code

    sql注入问题

    import pymysql
    
    conn = pymysql.connect(
        host = 'localhost',
        user = 'root',
        password = '123',
        database = 'day58',
        charset = 'utf8',
        # autocommit = True
        # 这个参数配置完成后  增删改操作都不需要在手动加conn.commit了
    
    )
    cursor = conn.cursor(pymysql.cursors.DictCursor)
    
    
    sql = 'select * from students'
    cursor.execute(sql)
    # print(cursor.fetchone())
    
    
    """
    增删改操作 都必须加一句
    conn.commit()操作
    """
    conn.commit()
    name = input('name>>>:').strip()
    class_id = input('class_id>>>:').strip()
    
    sql = "select * from students where name = '%s' and class_id  = '%s'"%(name,class_id)
    print(sql)
    res = cursor.execute(sql)
    # execute 能够自动识别sql语句中的%s 帮你做替换
    
    if res:
        print(cursor.fetchone())
    else:
        print('用户或班级错误')
    View Code

     解决问题

    import pymysql
    
    
    conn = pymysql.connect(
        host = 'localhost',
        user = 'root',
        password = '123',
        database = 'day58',
        charset = 'utf8',
        autocommit = True
    #   # 这个参数配置完成后  增删改操作都不需要在手动加conn.commit了
    )
    course = conn.cursor(pymysql.cursors.DictCursor)
    
    sql = 'select * from students'
    # 提交
    course.execute(sql)
    
    
    
    name = input('name')
    class_id = input('number')
    sql = 'select * from students where name = %s and class_id = %s'
    print(sql)
    res = course.execute(sql,(name,class_id))
    # 能够帮你自动过滤特殊符号 避免sql注入的问题
    if res:
        print(course.fetchone())
    else:
        print('用户或班级不对')
    """
    sql注入 就是利用注释等具有特殊意义的符号 来完成一些骚操作
    
    后续写sql语句  不要手动拼接关键性的数据
    而是让excute帮你去做拼接
    
    """
    View Code

     

    增删改

    #
    sql = "insert into user(username,password) values(%s,%s)"
    rows = cursor.excute(sql,('jason','123'))
    
    # 修改
    sql = "update user set username='jasonDSB' where id=1"
    rows = cursor.excute(sql)
    
    """
    增和改单单执行excute并不会真正影响到数据,需要再执行conn.commit()才可以完成真正的增改
    """
    
    # 一次插入多行记录
    res = cursor,excutemany(sql,[(),(),()]
    View Code
  • 相关阅读:
    use other gpio pins as i2c
    systemd详解详解
    Python ctype sizeof incorrect!
    libvirt 安装篇
    Django Restful Framework (二): ModelSerializer
    Django Restful Framework (一): Serializer
    libvirt 网络手册(二):桥接网络
    KVM 虚拟机联网方式:NAT 和 Bridge
    libvirt 网络手册(一)
    CentOS 7 环境配置
  • 原文地址:https://www.cnblogs.com/komorebi/p/11396459.html
Copyright © 2011-2022 走看看