zoukankan      html  css  js  c++  java
  • 数据库操作——pymysql模块

    import pymysql
    
    conn=pymysql.connect(
        host='localhost',
        port=3306,
        user='zuo',
        password='123',
        database='day46',
        charset='utf8',
    )
    name=input('name:')
    pwd=input('pwd:')
    # cur=conn.cursor()          #获取游标  执行完毕返回的结果集默认以元组显示
    cur=conn.cursor(cursor=pymysql.cursors.DictCursor)  #设置执行完完毕返回的结果以字典显示
    print('cur',cur)
    sql='select * from employee WHERE name=%s AND pwd=%s;'
    row=cur.execute(sql,(name,pwd))      #row是获取结果的行数
    print('row',row)
    print(cur.fetchone())        #获取记录
    if row:
        print('登录成功')
    else:
        print('登录失败')

      输出:

    name:egon
    pwd:123
    cur <pymysql.cursors.DictCursor object at 0x0000011ADBC30F28>
    row 1
    {'id': 2, 'name': 'egon', 'pwd': '123'}
    登录成功

      示例二

    import pymysql
    
    conn=pymysql.connect(
        host='localhost',
        port=3306,
        user='zuo',
        password='123',
        database='day46',
        charset='utf8',
    )
    cur=conn.cursor(cursor=pymysql.cursors.DictCursor)  #设置执行完完毕返回的结果以字典显示
    sql='select * from employee;'
    row=cur.execute(sql)
    cur.scroll(1,mode='absolute')#绝对移动
    cur.scroll(1,mode='relative')#相对移动
    print(cur.fetchone())        #fetchone() fetchmany(4) fetchall()

      输出:

    {'id': 2, 'name': 'egon', 'pwd': '123'}

      示例三

    import pymysql
    
    conn=pymysql.connect(
        host='localhost',
        port=3306,
        user='zuo',
        password='123',
        database='day46',
        charset='utf8',
    )
    cur=conn.cursor(cursor=pymysql.cursors.DictCursor)  #设置执行完完毕返回的结果以字典显示
    sql='insert into employee(name,pwd) VALUES ("yuanhao","123"),("wenzhou","123"),("alex","123"),("egon","123");'
    row=cur.execute(sql)
    conn.commit()  #commit Commit changes to stable storage生效保存到硬盘中
    print(cur.lastrowid)  

    二 sql注入

      SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。

      比如:简单来说--代表注释的意思

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

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

      

    最后那一个空格,在一条sql语句中如果遇到select * from t1 where id > 3 -- and name='egon';则--之后的条件被注释掉了
    
    #1、sql注入之:用户存在,绕过密码
    egon' -- 任意字符
    
    #2、sql注入之:用户不存在,绕过用户与密码
    xxx' or 1=1 -- 任意字符

  • 相关阅读:
    bzoj 3091 城市旅行(LCT+数学分析)
    bzoj 2843 极地旅行社(LCT)
    Tsinsen A1303. tree(伍一鸣) (LCT+处理标记)
    bzoj 2002 [Hnoi2010]Bounce 弹飞绵羊(LCT)
    bzoj 2049 [Sdoi2008]Cave 洞穴勘测(LCT)
    vijos P1213 80人环游世界(有源汇的上下界费用流)
    bzoj 3698 XWW的难题(有源汇的上下界最大流)
    bzoj 2502 清理雪道(有源汇的上下界最小流)
    sgu 176 Flow construction(有源汇的上下界最小流)
    详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI区别
  • 原文地址:https://www.cnblogs.com/654321cc/p/7755198.html
Copyright © 2011-2022 走看看