• python获取sql数据的操作,pymysql模块


    第一步:安装pymysql模块

      可以在cmd命令行敲....pip3 install pymysql

      也可以在pycham中添加

     

    然后上代码:

    import pymysql
    #连接上数据库 conn
    =pymysql.Connect( host="localhost", user="root", password="123", database="user", charset="utf8" )
    #建立一个游标
    cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
    sql
    ="select * from emp"
    res
    =cursor.execute(sql)#execute 执行 括号里直接跟sql语句,我们可以向这个样赋值给一个变量,然后再执行 print(res) # 打印出来的不是结果,而是受影响的条数 # re=cursor.fetchall() #调用这个方法获取全部内容 re=cursor.fetchone() # 这个方法就是获取第一条内容 print(re)
    #下面的操作就是关闭连接了。
    cursor.close() conn.close()


    这就是一个最简单的python连接数据库进行查询的最简单的操作,下面来扩展一下

    我们要先在数据库里建立一个用户表,存放用户名个密码

    import pymysql
    #链接
    conn=pymysql.connect(
      host='localhost',
      user='root',
      password='123',
      database='egon',
      charset='utf8')
    #游标
    cursor=conn.cursor() #执行完毕返回的结果集默认以元组显示
    #cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)  # 以字典的方式显示数据
    
    # 3.pymysql操作数据库
    #执行sql语句
    user = input(">>>:").strip()
    pwd = input(">>>:").strip()
    sql='select * from userinfo where name="%s" and password="%s"' %(user,pwd) #注意%s需要加引号
    
    rows=cursor.execute(sql) #执行sql语句,返回sql查询成功的记录数目
    # 获取真实数据cursor.fetchone(),
    cursor.fetchall(),cursor.fetchmany(),类似管道取值,获取一条,所有,多条 cursor.scroll(1,'relative') # 相对移动
    #当前位置往后数一条取开始取数据
    cursor.scroll(3,'absolute') # 绝对移动
    #从文件开头数,第三条数据后开始取
    cursor.close() conn.close()

    SQL注入

    基于以上的代码,会出现一个问题:

    我们称为 SQL注入:

    # 用户名正确
    username >>>: root' -- jjsakfjjdkjjkjs
    # 用户名密码都不对的情况
    username >>>: xxx' or 1=1 --asdjkdklqwjdjkjasdljad
    password >>>: ''

    为什么会出现这种问题,我们首先应该想到,  “--”   在sql中代表的是什么? 

       “-- ”   就是注释的意思,将sql后面的语句注释了

    下面的 1=1,条件为真,为真的话自然就可以直接获取到我们需要的数据了

    怎么解决这个问题呢?

    sql有一个自动完成拼接的方法,就是把username和password 写在执行语句的后面

    import pymysql
    
    conn=pymysql.connect(
        host='localhost',
        user='root',
        password='123',
        database='user'
    )
    
    cursor=conn.cursor(pymysql.cursors.DictCursor)
    
    user=input('>>>:')
    pwd=input('>>>:')
    sql="select * from user where username=%s and password=%s"
    
    res=cursor.execute(sql,(user,pwd))
    
    if res:
        print('登录成功')
    else:
        print(
            '登录失败'
        )
    
    cursor.close()
    conn.close()

    基于上面的内容我们可以实现增删改的操作

    # 增
    sql = "insert into user(username,password) values(%s,%s)"
    rows = cursor.excute(sql,('jason','123'))
    
    # 修改
    sql = "update user set username='jasonDSB' where id=1"
    rows = cursor.excute(sql)
    
    """
    增和改单单执行excute并不会真正影响到数据,需要再执行conn.commit()才可以完成真正的增改
    """
    
    # 一次插入多行记录
    res = cursor,excutemany(sql,[(),(),()]

    可能有的人执行到这来发现数据库的信息并没有变化~

    原因很简单,增和改单单执行excute并不会真正影响到数据,需要再执行conn.commit()才可以完成真正的增改

    我们需要在执行语句后加入 conn.commit()

    然后在看看执行后的数据库有没有发生变化

    import pymysql
    
    conn=pymysql.connect(host='localhost',user='root',password='123',database='user')
    cursor=conn.cursor()
    
    sql="insert into user(username,password) values(%s,%s)"
    #插入用户数据
    cursor.executemany(sql,[('user1','123'),('user2','123'),('user3','123'),]) conn.commit() cursor.close() conn.close()
  • 相关阅读:
    JStorm集群的安装和使用
    Kafka集群的安装和使用
    Linux下which、whereis、locate、find 命令的区别
    Linux 命令小记
    Linux 普通进程 后台进程 守护进程
    Java 命令行运行参数大全
    一台机子上运行使用不同Java版本的多个tomcat
    Ubuntu 设置程序开机启动(以指定用户身份)
    linux 开机启动过程详解
    关于Linux发行版的选择
  • 原文地址:https://www.cnblogs.com/tuzaizi/p/10877364.html
Copyright © 2020-2023  润新知