<强>一、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模块的使用(增删改查)详解