博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pymysql实现MySQL与Python交互
阅读量:4600 次
发布时间:2019-06-09

本文共 3349 字,大约阅读时间需要 11 分钟。

常见MySQL操作

所需模块:

1 pip3  install pymysql

查询(fetchone,fetchmany,fetchall):

  1.fetchone

1 import pymysql 2  3 con = pymysql.connect(host="localhost", user="root", password="admin", database="pysql", charset="utf8") 4 cursor = con.cursor() 5 try: 6     # 当id设置为主键,但是没有设置为自增时,则必须给id字段赋值,否则会报错。 7     sql = "select * from userinfo;" 8     cursor.execute(sql) 9     # 单使用一个fetchone会获取索引为0的记录,若使用多个fetchone时,会按照前一个的索引值继续向下获取记录10     data1 = cursor.fetchone()11     data2 = cursor.fetchone()12     data3 = cursor.fetchone()13 except Exception as e:14     print("error")15 cursor.close()16 con.close()17 print(data1)18 print(data2)19 print(data3)

  2.fetchmany

1 import pymysql 2  3 con = pymysql.connect(host="localhost", user="root", password="admin", database="pysql", charset="utf8") 4 cursor = con.cursor() 5 try: 6     # 当id设置为主键,但是没有设置为自增时,则必须给id字段赋值,否则会报错。 7     sql = "select * from userinfo;" 8     cursor.execute(sql) 9     # 和fetchone相同:单个从0开始获取查询,多个从上一个的索引之后进行查询10     data1 = cursor.fetchmany(3)11     data2 = cursor.fetchmany(5)12 except Exception as e:13     print("error")14 cursor.close()15 con.close()16 print(data1)17 print(data2)

  3.fetchall

1 import pymysql 2  3 con = pymysql.connect(host="localhost", user="root", password="admin", database="pysql", charset="utf8") 4 cursor = con.cursor() 5 try: 6     # 当id设置为主键,但是没有设置为自增时,则必须给id字段赋值,否则会报错。 7     sql = "select * from userinfo;" 8     cursor.execute(sql) 9     # 单使用一个fetchmany会获取所有记录,若使用多个fetchone时,其余的fetchall()结果为空10     data1 = cursor.fetchall()11     data2 = cursor.fetchall()12 except Exception as e:13     print("error")14 cursor.close()15 con.close()16 print(data1)17 print(data2)

 

 

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

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注入问题。

转载于:https://www.cnblogs.com/liuyinzhou/p/8031963.html

你可能感兴趣的文章
图论的一些概念、定理
查看>>
WebView用法
查看>>
Lecture 3: Planning by Dynamic Programming
查看>>
用flash代替图片IMG,设置动态效果链接
查看>>
关于JS的随笔(二)
查看>>
select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET(转)
查看>>
webbug3.0菜鸟笔记1
查看>>
数组相关函数
查看>>
Python 和其他编程语言数据类型的比较
查看>>
T2695 桶哥的问题——送桶 题解
查看>>
HTML5 表单
查看>>
Android群英传》读书笔记 (3) 第六章 Android绘图机制与处理技巧 + 第七章 Android动画机制与使用技巧...
查看>>
OLEDB和ODBC的区别(优缺点)
查看>>
关于微信公众平台测试号配置失败的问题
查看>>
CLR执行模块基础
查看>>
【NOIP2001】统计单词个数
查看>>
linux常用端口
查看>>
异常处理
查看>>
/proc/uptime详解
查看>>
如何建立合适的索引?
查看>>