zoukankan      html  css  js  c++  java
  • python操作MySQL数据库

    =============python操作MySQL============
    
    一、链接,执行sql,关闭(游标)
    
    import pymysql # 导入模块
    user= input('用户名:>>').strip()
    pwd= input('密码:>>').strip()
    
    #先链接,拿到游标
    conn=pymysql.connect(host='localhost',user='root',password='密码', database='数据库名',charset='utf8')
    cursor=conn.cursor() #拿到游标,即mysql >
    #执行sql
    sql='select * from userinfo 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'--nnn,我们输入的xxx加'在程序中拼接成一个
        判断条件name='xxx'--nnn'
        
    
        -sql注入的两种情况
            1.sql注入之:用户存在,绕过密码
                name' -- 任意字符
            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的规矩来。
    
            -- execute源码解释
            def execute(self, query, args=None):
            """Execute a query
    
            :param str query: Query to execute.
    
            :param args: parameters used with query. (optional)
            :type args: tuple, list or dict
    
            :return: Number of affected rows
            :rtype: int
    
            If args is a list or tuple, %s can be used as a placeholder in the query.
            If args is a dict, %(name)s can be used as a placeholder in the query.
            """
    
    三、增、删、改、查:conn.commit()
    
    =======import pymysql
    先链接,拿到游标
    conn=pymysql.connect(host='localhost',user='root',password='密码',database='数据库名')
    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='密码',database='数据库名')
    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='密码',database='数据库名')
    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()
    
    
    ========查(fetchont,fetchmany.fetchall)
    
    ---------查fetchone,fetchmany,fetchall-----------
    import pymysql
    conn=pymysql.connect(host='localhost',user='root',password='密码',database='数据库名')
    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='喵喵6',database='数据库名',charset='utf8')
    cursor=conn.cursor()
    
    
    sql='insert into user1(user,password) values(%s,%s);'
    rows=cursor.execute(sql,('name','123'))
    # rows=cursor.executemany(sql,[('aaa','123'),('bbb','123'),('ccc','12323')])
    conn.commit()
    print(cursor.lastrowid)  #查看表中最后一行的iD
    
    cursor.close()
    conn.close()
  • 相关阅读:
    运用《深入理解Java虚拟机》书中知识解决实际问题
    FPGA实现移动目标检测
    FPGA实现人脸检测
    FPGA实现图像的边缘检测:灰度形态学梯度
    FPGA实现图像的二值形态学滤波:边界提取
    VAST3.0规范
    Flash Socket通信的安全策略问题 843端口
    100个开源游戏
    游戏指标分析
    网络广告类型有哪些?
  • 原文地址:https://www.cnblogs.com/xiao-xue-di/p/9688217.html
Copyright © 2011-2022 走看看