• MySQL数据库学习【第十二篇】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()
     
  • 相关阅读:
    Windows系统环境变量path优先级测试报告
    URI和URL的区别
    智能引导式报错(Class file name must end with .class)
    【Algorithm】冒泡排序
    【C语言】练习2-9
    【C语言】练习2-8
    【C语言】练习2-1
    【C语言】练习1-23
    【C语言】练习1-22
    【C语言】练习1-21
  • 原文地址:https://www.cnblogs.com/xiaohema/p/8454998.html
Copyright © 2020-2023  润新知