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

pymysql实现MySQL与Python交互

时间:2017-12-13 14:45:49      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:exe   center   pytho   输入   fetchone   src   常见   alt   fetchall   

常见MySQL操作

所需模块:

1 pip3  install pymysql

查询(fetchone,fetchmany,fetchall):

import   pymysql
#连接
con = pymysql.connect(host=localhost,user=root,passwd=admin,db=db1,charset=utf8)
# 游标
cur = con.cursor()
sql = select * from USER 
cur.execute(sql)
#获取第一条数据
row_one= cur.fetchone()
#获取任意多条数据,默认从第一条数据作为开始
row_many = cur.fetchmany(3)
# 获取所有数据
row_all = cur.fetchall()
cur.close()
con.close()
print(row_one)
print(row_many)
print(row_all)

插入、更新、修改(最后需要提交)

 1 import pymysql
 2 conn=pymysql.connect(host=localhost,user=root,password=admin,database=db1)
 3 cursor=conn.cursor()
 4 sql=insert into user(name,password) values("xxx","123");
 5 rows=cursor.execute(sql)
 6 print(cursor.lastrowid) #在插入语句后查看最新一条记录id
 7 # pymysql.connect 类默认开启了事务,因此对表进行修改、更新、删除、插入操作时需要提交事务才可以生效
 8 conn.commit()
 9 cursor.close()
10 conn.close()

SQL注入

名词解释:

  SQL注入是对Python与MySQL进行动态数据校验时,用户故意输入非法字段,从而绕过数据校验的行为。

 1 import pymysql
 2 user=input(用户名: ).strip()
 3 pwd=input(密码: ).strip()
 4 
 5 #链接
 6 conn=pymysql.connect(host=localhost,user=root,password=admin,database=db1,charset=utf8)
 7 #游标
 8 cursor=conn.cursor() #执行完毕返回的结果集默认以元组显示
 9 #执行sql语句
10 sql=select * from user where name="%s" and password="%s" %(user,pwd) #注意%s需要加引号
11 print(sql)
12 res=cursor.execute(sql) #执行sql语句,返回sql查询成功的记录数目
13 cursor.close()
14 conn.close()
15 
16 if res:
17     print(登录成功)
18 else:
19     print(登录失败)

正常情况下的输入过程:

技术分享图片

技术分享图片

故意绕过验证的非法输入

  当知道用户名时:

技术分享图片

虽然知道密码,但输入的密码不匹配却成功登陆。

  用户名和密码都不知道时:

技术分享图片

虽然不知道用户名和密码,却成功登陆。

  SQL注入的中心思想就是人为的输入SQL语句中的特殊字符串,绕过验证。"--"在MySQL中为注释字符,通过此方法可以屏蔽部分代码,从而绕过验证。

  解决办法:

  使用MySQL的内置方法校验输入字符串的合法性,提高安全性。

 1 import pymysql
 2 user=input(用户名: ).strip()
 3 pwd=input(密码: ).strip()
 4 
 5 #链接
 6 conn=pymysql.connect(host=localhost,user=root,password=admin,database=db1,charset=utf8)
 7 #游标
 8 cursor=conn.cursor() #执行完毕返回的结果集默认以元组显示
 9 #执行sql语句
10 sql=select * from user where name=%s and password=%s#注意%s没有加引号
11 print(sql)
12 res=cursor.execute(sql,[user,pwd]) #执行sql语句,返回sql查询成功的记录数目
13 cursor.close()
14 conn.close()
15 if res:
16     print(登录成功)
17 else:
18     print(登录失败)

  校验验证:

技术分享图片

技术分享图片

技术分享图片

  成功解决SQL注入问题。

pymysql实现MySQL与Python交互

标签:exe   center   pytho   输入   fetchone   src   常见   alt   fetchall   

原文地址:http://www.cnblogs.com/liuyinzhou/p/8031963.html

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