常见MySQL操作

所需模块:

 pip3  install pymysql

查询(fetchone,fetchmany,fetchall):

  1.fetchone

 import pymysql

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

  2.fetchmany

 import pymysql

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

  3.fetchall

 import pymysql

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

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

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

SQL注入

名词解释:

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

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

正常情况下的输入过程:

故意绕过验证的非法输入

  当知道用户名时:

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

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

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

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

  解决办法:

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

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

  校验验证:

  成功解决SQL注入问题。

pymysql实现MySQL与Python交互的更多相关文章

  1. mysql及python交互

    mysql在之前写过一次,那时是我刚刚进入博客,今天介绍一下mysql的python交互,当然前面会把mysql基本概述一下. 目录: 一.命令脚本(mysql) 1.基本命令 2.数据库操作命令 3 ...

  2. MySQL和Python交互

    与Python交互 python3模块名:pymysql conda install pymysql conda install sqlalchemy python2模块名:MySQLdb impor ...

  3. 数据库之MySQL与Python交互

    准备数据 创建数据表 -- 创建 "京东" 数据库 create database jing_dong charset=utf8; -- 使用 "京东" 数据库 ...

  4. MySql与python交互

    No1: 引入MySql:python2是Mysqldb,python3是pymysql No2: Connection对象 用于建立与数据库的连接 创建对象:调用connect()方法 conn=c ...

  5. Python全栈 MySQL 数据库(SQL命令大全、MySQL 、Python调用)

    为了梦想与了信仰    开局一张图   主要三个方面: 1.Linux终端命令 2.MySQL语句 3.Python调用   先删库 再跑路.....                         ...

  6. MySQL 存储引擎、锁、调优、失误与事务回滚、与python交互、orm

    1.存储引擎(处理表的处理器) 1.基本操作 1.查看所有存储引擎 mysql> show engines; 2.查看已有表的存储引擎 mysql> show create table 表 ...

  7. 四:MySQL系列之Python交互(四)

    该篇主要介绍MySQL数据库的分表.以及与Python的交互的基本操作等. 一.拆分表操作 1.1  准备工作 创建数据库 --> 使用数据库 --> 创建数据表 --- 添加记录 -- ...

  8. Python 3.2: 使用pymysql连接Mysql

    在python 3.2 中连接MYSQL的方式有很多种,例如使用mysqldb,pymysql.本文主要介绍使用Pymysql连接MYSQL的步骤 1        安装pymysql ·       ...

  9. Python 3 进阶 —— 使用 PyMySQL 操作 MySQL

    PyMySQL 是一个纯 Python 实现的 MySQL 客户端操作库,支持事务.存储过程.批量执行等. PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Py ...

随机推荐

  1. 2017 多校训练 1006 Function

    Function Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

  2. 分酒问题(DFS解法)

    题目大概是这样: 已知有三个容量分别为3千克.5千克和8千克的并且是没有刻度的酒瓶,3千克和5千克的瓶子均装满了酒,而8千克的瓶子为空.现要求仅用这三个酒瓶将这些酒均分为两个4千克并分别装入5千克和8 ...

  3. css之定位(position)

    1.什么是定位: css中的position属性,position有四个值:absolute/relative/fixed/static(绝对/相对/固定/静态(默认))通过定位属性可以设置一些不规则 ...

  4. cloneNode克隆节点在不同浏览器的差异

    cloneNode是用于克隆节点的,如果待克隆的节点还有子节点以及自定义属性.添加的有事件,那么克隆时,可以指定是克隆节点本身,还是将其所有子节点信息也克隆进去,这是通过给cloneNode传递一个布 ...

  5. Red Hat 7.0 DNS服务配置笔记

    先挂载镜像,然后配置yum,然后安装yum install -y bind 配置静态 IP.DNS就是他本身的IP地址. 修改DNS的配置文件,在后面加入区域配置信息.vim /etc/named.c ...

  6. 关于ThinkPHP中的时间自动填充

    <?php class NewsModel extends Model{ protected $_auto = array( array('time_at','mydate','1','call ...

  7. 一起写框架-Ioc内核容器的实现-基础功能-getBean(五)

    实现的功能 1. 启动程序时,将@ComponentScan加载的类,创建对象并放在容器里面.(查看上一篇文) 2. 通过ApplicatoinContext的getBean()方法获得容器里面的对象 ...

  8. TFS在项目中Devops落地进程(上)

    经过近2年折腾,基于TFS的Devops主线工程大体落地完毕.在此大体回忆下中间的各种历程. 开始之前简单说下什么是TFS(Team Foundation Server). TFS是微软推出的一款AL ...

  9. 浅谈字体小图标font awesome,iconfont,svg各自优缺点

    三种都是矢量图(即放大不失真),但是个自又有个自的优缺点, 1.font awesome: 优点:相对比较简单,查看官网看例子基本上都会用 (http://www.bootcss.com/p/font ...

  10. Set的常用方法(java)

    一.新增:重复新增的值会被覆盖 代码: Set<String> ss=new HashSet<String>(); ss.add("a");ss.add(& ...