码迷,mamicode.com
首页 > 数据库 > 详细

pymysql模块的使用

时间:2018-10-17 22:19:33      阅读:327      评论:0      收藏:0      [点我收藏+]

标签:python   实现   程序   创建   print   word   res   password   mys   

一、pymysql的下载和使用

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

(1)pymysql模块的下载

pip3 install pymysql

(2)pymysql的使用

数据库和数据都已存在

技术分享图片

 

 

 

 

# 实现:使用Python实现用户登录,如果用户存在则登录成功(假设该用户已在数据库中)


import pymysql
user = input(请输入用户名:)

pwd = input(请输入密码:)



# 1.连接
conn = pymysql.connect(host=127.0.0.1, port=3306, user=root, password=‘‘, db=db8, charset=utf8)


# 2.创建游标
cursor = conn.cursor()

#注意%s需要加引号
sql = "select * from userinfo where username=‘%s‘ and pwd=‘%s‘" %(user, pwd)
print(sql)

# 3.执行sql语句
cursor.execute(sql)

result=cursor.execute(sql) #执行sql语句,返回sql查询成功的记录数目
print(result)


# 关闭连接,游标和连接都要关闭
cursor.close()
conn.close()

if result:
    print(登陆成功)
else:
    print(登录失败)

 

二、execute()之sql注入

最后那一个空格 , 在一条sql 语句中如果遇到  select * from userinfo where username = mjj -- asdsadn and pwd = ‘‘ 则-- 之后的条件被注释掉了(注意-- 后面还有一个空格)

# 1, sql 注入之 : 用户存在 , 绕过密码  
mjj -- 任意字符

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

 

技术分享图片

 

 

 

 

技术分享图片

 

 

 

 

 

 

解决方法:

# 原来是我们对sql进行字符串拼接
# sql="select * from userinfo where name=‘%s‘ and password=‘%s‘" %(username,pwd)
# print(sql)
# result=cursor.execute(sql)

#改写为(execute帮我们做字符串拼接,我们无需且一定不能再为%s加引号了)
sql="select * from userinfo where name=%s and password=%s" #!!!注意%s需要去掉引号,因为pymysql会自动为我们加上
result=cursor.execute(sql,[user,pwd]) #pymysql模块自动帮我们解决sql注入的问题,只要我们按照pymysql的规矩来。

 

pymysql模块的使用

标签:python   实现   程序   创建   print   word   res   password   mys   

原文地址:https://www.cnblogs.com/heshun/p/9807209.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!