zoukankan      html  css  js  c++  java
  • pymysql模块与sql注入

    pymysql模块支持python代码操作数据库MySQL

    下载:
    pip3 install pymysql

    示例:

    import pymysql

    conn = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='123',
    database='day48',
    charset='utf8' # 编码千万不要加-
    ) # 链接数据库
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 产生一个游标对象(就是用来帮你执行命令的)
    """
    cursor=pymysql.cursors.DictCursor将查询结果以字典的形式返回
    """
    sql = 'select * from teacher;'
    res = cursor.execute(sql)
    # print(res) # execute返回的是你当前sql语句所影响的行数 改返回值一般不用
    # 获取命令执行的查询结果
    # print(cursor.fetchone()) # 只拿一条
    # print(cursor.fetchall()) # 拿所有
    # print(cursor.fetchmany(2)) # 可以指定拿几条
    print(cursor.fetchone())
    print(cursor.fetchone()) # 读取数据类似于文件光标的移动
    cursor.scroll(1,'relative') # 相对于光标所在的位置继续往后移动1位
    # cursor.scroll(1, 'absolute') # 相对于数据的开头往后继续移动1位
    print(cursor.fetchall())

    结合数据库完成一个用户的登录功能?

    import pymysql

    conn = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='123',
    database='day48',
    charset='utf8' # 编码千万不要加-
    ) # 链接数据库
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

    username = input('>>>:')
    password = input('>>>:')
    sql = "select * from user where username=%s and password=%s"
    # sql = "select * from user where username=username and password=password"(错误演示)
    # 不要手动拼接数据 先用%s占位 之后将需要拼接的数据直接交给execute方法即可
    print(sql)
    rows = cursor.execute(sql, (username, password)) # 自动识别sql里面的%s用后面元组里面的数据替换
    # rows = cursor.execute(sql) (错误演示)
    if rows:
    print('登录成功')
    print(cursor.fetchall())
    else:
    print('用户名密码错误')

    ps:

    利用一些语法的特性 书写一些特点的语句实现固定的语法
    MySQL利用的是MySQL的注释语法
    select * from user where name='jason' -- jhsadklsajdkla' and password=''

    select * from user where name='xxx' or 1=1 -- sakjdkljakldjasl' and password=''

    日常生活中很多软件在注册的时候都不能含有特殊符号
    因为怕你构造出特定的语句入侵数据库 不安全

    敏感的数据不要自己做拼接 交给execute帮你拼接即可
    
    
  • 相关阅读:
    Java的接口及实例
    卷积函数的参数为Conv2d(in_channels, out_channels, kernel_size, stride, padding, ...),一般关心这5个参数即可
    torch.randn和torch.rand的区别
    Pytorch 里 nn.AdaptiveAvgPool2d(output_size) 原理是什么?
    Python中*args、**args到底是什么、有啥区别、怎么用
    padding输入值是tuple数组,其含义是
    矩阵/图像边长经过卷积操作后的尺寸计算方法:
    CIFAR-10 数据集
    vgg code
    Epoch、Iteration、Batchsize
  • 原文地址:https://www.cnblogs.com/h1227/p/12846380.html
Copyright © 2011-2022 走看看