mysql之pymysql模块相关

Posted jingjing12

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql之pymysql模块相关相关的知识,希望对你有一定的参考价值。

 

 

首先应该学会怎样安装pymysql模块:
  安装1:

//安装
pip 3 install pymysql
/*如果pip不能正常使用可以报:Fatal error in launcher: Unable to create process using ‘"‘
可能是因为pip的配置不太正常,可以使用:*/
python -m pip install pymysql //尝试一下一般都会成功,注意前面python的版本号

  安装2:在pycharm中安装

技术分享图片

技术分享图片

 pymysql的用法:(连接数据库、获取游标、执行SQL语句、关闭游标,关闭连接)

import pymysql
# 获取用户输入
name = input("用户名>>:")
pwd = input("密码>>:")

# 校验用户输入的用户名和密码是否正确
# 去数据库里取数据做判断
# 1. 连上数据库
conn = pymysql.connect(host="localhost",database="s8", user="root", password="", charset="utf8")  # 不是utf-8
# 光有链接还不行,需要获取光标,让我能够输入SQL语句并执行
cursor = conn.cursor()
# 2. 执行SQL语句 --> select * from userinfo where name=name and pwd=pwd
sql = "select * from userinfo WHERE name=‘%s‘ and pwd=‘%s‘;" % (name, pwd)
print(sql)
ret = cursor.execute(sql)  # 获取影响的行数
# 关闭光标和连接
cursor.close()
conn.close()
if ret:
    print("登陆成功")
else:
    print("登录失败")

  虽然已经实现了对输入的用户名和密码与数据库中的数据进行对比了,但时出现了一点问题,如果用户输入时输入--符号时就会注释掉它后面的sql不会执行,就会绕开密码,例如:

最后那一个空格,在一条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的规矩来。

对数据库数据的增、删、改、查:

持续更新....

  

以上是关于mysql之pymysql模块相关的主要内容,如果未能解决你的问题,请参考以下文章

Python连接MySQL数据库之pymysql模块使用

Python连接MySQL数据库之pymysql模块使用

Python连接MySQL数据库之pymysql模块使用

Python连接MySQL数据库之pymysql模块使用

MySQL之pymysql模块

Python连接MySQL数据库之pymysql模块使用