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

    一、安装的两种方法

    第一种

    #安装
    pip3 install pymysql

    第二种

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

    复制代码
    import pymysql
    user= input('用户名:>>').strip()
    pwd= input('密码:>>').strip()
    

    #先链接,拿到游标
    conn=pymysql.connect(host='localhost',user='root',password='123456',
                 database='day47',charset='utf8')
    cursor
    =conn.cursor() #拿到游标,即mysql >

    执行sql

    sql='select * from user where user="%s" and password="%s";'%(user,pwd)
    print(sql) #注意%s需要加双引号
    rows
    = cursor.execute(sql) #拿到受影响的行数

    cursor.close()
    conn.close()

    if rows:
    print('登录成功')
    else:
    print('登录失败')

    复制代码

    三、execute()之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 -- 任意字符

    复制代码

     

    解决注入

    复制代码
    # 原来是我们对sql进行字符串拼接
    # sql="select * from userinfo where name='%s' and password='%s'" %(user,pwd)
    # print(sql)
    # rows=cursor.execute(sql)
    

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

    复制代码

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

    增:

    复制代码
    import pymysql
    先链接,拿到游标
    conn=pymysql.connect(host='localhost',user='root',password='123456',database='day47')
    cursor=conn.cursor() #拿到游标,即mysql >
    #执行sql   增:
    sql='insert into user1(user,password) VALUES (%s,%s)'
    print(sql)
    # rows = cursor.execute(sql,('xixi',123))  #插入一条记录
    rows = cursor.executemany(sql,[('xixi',123),('aaa',456),('ttt',147)]) #插入多行记录
    print('%s row in set (0.00 sec)'%rows)
    

    conn.commit() #提交到数据库
    cursor.close()
    conn.close()

    复制代码

    删:

    复制代码
    import pymysql
    #先链接,拿到游标
    name=input('>>').strip()
    conn=pymysql.connect(host='localhost',user='root',password='123456',database='day47')
    cursor=conn.cursor() #拿到游标,即mysql >
    #执行sql   删:
    sql='delete from user1 where user =%s;'  #删除数据
    print(sql)
    rows = cursor.execute(sql,(name))
    print('%s row in set (0.00 sec)'%rows)
    

    conn.commit() #提交到数据库
    cursor.close()
    conn.close()

    复制代码

    改:

    复制代码
    import pymysql
    #先链接,拿到游标
    id=input('>>').strip()
    conn=pymysql.connect(host='localhost',user='root',password='123456',database='day47')
    cursor=conn.cursor() #拿到游标,即mysql >
    #执行sql   改:
    sql=' update user1 set password = "5555555" where id=%s;'
    print(sql)
    rows = cursor.execute(sql,(id))
    print('%s row in set (0.00 sec)'%rows)
    

    conn.commit() #提交到数据库
    cursor.close()
    conn.close()

    复制代码

    五、查:fetchone,fetchmany,fetchall

    复制代码
    ---------查fetchone,fetchmany,fetchall-----------
    import pymysql
    conn=pymysql.connect(host='localhost',user='root',password='123456',database='day47')
    cursor=conn.cursor() #拿到游标,即mysql >
    #执行sql   查:
    sql='select * from user1;'
    rows = cursor.execute(sql)
    

    #查单条fetchone
    res1=cursor.fetchone()
    res2
    =cursor.fetchone()
    res3
    =cursor.fetchone()
    print(res1)
    print(res2)
    print(res3)
    print(res3[0])
    #查多条fetchmany
    print(cursor.fetchmany(3))
    print(cursor.fetchone())
    #查所有fetchall
    print(cursor.fetchall())
    print(cursor.fetchone())

    #-------光标的移动--------

    1.绝对路径:从文件的开头位置算起

    print(cursor.fetchall())
    cursor.scroll(
    1,mode='absolute')
    print(cursor.fetchone())
    cursor.scroll(
    3,mode='absolute')
    print(cursor.fetchone())

    #2.相对路径:
    print(cursor.fetchone())
    print(cursor.fetchone())
    cursor.scroll(
    2,mode='relative') #相对于上面的两条向后移两条
    print(cursor.fetchone())

    print('%s row in set (0.00 sec)' %rows)
    cursor.close()
    conn.close()

    复制代码

    六、获取插入的最后一条数据的自增ID

    复制代码
    ------查看表中最后一行的iD
    import pymysql
    conn=pymysql.connect(host='localhost',user='root',password='123456',
                 database='day47',charset='utf8') cursor=conn.cursor()

    sql='insert into user1(user,password) values(%s,%s);'
    rows
    =cursor.execute(sql,('alex','123'))
    # rows=cursor.executemany(sql,[('yuanhao','123'),('laowu','123'),('kgf','12323')])
    conn.commit()
    print(cursor.lastrowid) #查看表中最后一行的iD

    cursor.close()
    conn.close()

    复制代码
  • 相关阅读:
    松软科技web课堂:字符串方法和属性
    松软科技web课堂:JavaScript 事件
    松软科技前端课堂:JavaScript 对象
    松软科技web课堂:JavaScript 数据类型
    MVN TEST指定运行脚本
    Cucumber语法格式
    Maven pom文件标签解析大全
    测试用例自动转换成自动化脚本
    Cucumber使用中问题
    Cucumber常用关键字
  • 原文地址:https://www.cnblogs.com/maaosheng/p/11619180.html
Copyright © 2011-2022 走看看