pymysql模块的使用(增删改查)详解

  

<强>一、pymysql的下载和使用
  

  

之前我们都是通过MySQL自带的命令行客户端工具MySQL来操作数据库,那如何在python程序中操作数据库呢?这就用到了pymysql模块,该模块本质就是一个套接字客户端软件,使用前需要事先安装。

  

(1) pymysql模块的下载

        pip3安装pymysql      

(2) pymysql的使用

        #实现:使用Python实现用户登录,如果用户存在则登录成功(假设该用户已在数据库中)         进口pymysql   用户=输入(“请输入用户名:')   pwd=输入(“请输入密码:')   # 1。连接   康涅狄格州=pymysql.connect(主机=127.0.0.1,端口=3306,用户=案?密码=",db=db8, charset=use utf8)   # 2。创建游标   光标=conn.cursor ()   #注意% s需要加引号   sql=" select *的用户信息,用户名=? s”和pwd=? s”%(用户、pwd)   打印(sql)   # 3。执行sql语句   cursor.execute (sql)   结果=cursor.execute (sql) #执行sql语句,返回sql查询成功的记录数目   打印(结果)   #关闭连接,游标和连接都要关闭   cursor.close ()   conn.close ()   如果结果:   打印(“登陆成功”)   其他:   打印(“登录失败”)      

<强>二、执行()之sql注入
  

  

最后那一个空格,在一条sql语句中如果遇到select *从用户信息,用户名=癿jj”——asadasdas”和pwd="则之后的条件被注释掉了(注意,后面还有一个空格)

        # 1、sql注入之:用户存在,绕过密码   mjj”,任意字符   # 2、sql注入之:用户不存在,绕过用户与密码   xxx ' or 1=1,任意字符      

解决方法:

        #原来是我们对sql进行字符串拼接   从用户信息# sql=" select * name==? s”和密码“% s”%(用户名、pwd)   #打印(sql)   #结果=cursor.execute (sql)   #改写为(执行帮我们做字符串拼接,我们无需且一定不能再为% s加引号了)   sql=皊elect *从用户信息的名字=% s和密码=% s " # ! ! !注意% s需要去掉引号,因为pymysql会自动为我们加上   结果=cursor.execute (sql,[用户,pwd]) # pymysql模块自动帮我们解决sql注入的问题,只要我们按照pymysql的规矩来。      

三,增,删,改:conn.commit ()
  

  

commit()方法:在数据库里增,删,改的时候,必须要进行提交,否则插入的数据不生效。

        进口pymysql   用户名=输入(“请输入用户名:')   pwd=输入(“请输入密码:')   # 1。连接   康涅狄格州=pymysql。连接(主机=發ocalhost”,端口=3306,用户=案?密码=",db=db8, charset=' use utf8)   # 2。创建游标   光标=conn.cursor ()   #操作   #增   # sql="插入用户信息(用户名、pwd)值(% s % s)”   # effect_row=cursor.execute (sql,(用户名、pwd))   #同时插入多条数据   # cursor.executemany (sql,[(“李四',' 110 '),(“王”五,' 119 ')))   #打印(effect_row) #   #改   # sql="更新用户信息设置用户名=% s id=2”   # effect_row=cursor.execute (sql、用户名)   #打印(effect_row)   #删   sql="从用户信息删除id=2”   effect_row=cursor.execute (sql)   打印(effect_row)   #一定记得提交   conn.commit ()   # 4。关闭游标   cursor.close ()   # 5。关闭连接   conn.close ()      

<强>四查:fetchone, fetchmany, fetchall
  

  

fetchone():获取下一行数据,第一次为首行;
  fetchall():获取所有行数据源
  fetchmany(4):获取4行数据
  

  

查看一下表内容:

        mysql>从用户信息select *;   + - - - - - - - - - - - - - - - - - - - - - - + +   用户名| pwd | | | id   + - - - - - - - - - - - - - - - - - - - - - - + +   | 1 | mjj | 123 |   | 3 |张三| 110 |   | 4 |李四| 119 |   + - - - - - - - - - - - - - - - - - - - - - - + +   行集(0.00秒)      

使用fetchone ():

        进口pymysql   # 1。连接   康涅狄格州=pymysql。连接(主机=發ocalhost”,端口=3306,用户=案?密码=",db=db8, charset=' use utf8)   # 2。创建游标   光标=conn.cursor ()   sql=' select *从用户信息的   cursor.execute (sql)   #查询第一行的数据   行=cursor.fetchone ()   打印(行)# (1 ' mjj ', ' 123 ')   #查询第二行数据   行=cursor.fetchone ()   打印(行)#(3张三’,‘110’)   # 4。关闭游标   cursor.close ()   # 5。关闭连接   conn.close ()

pymysql模块的使用(增删改查)详解