pymysql实现MySQL与Python交互
常见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交互的更多相关文章
- mysql及python交互
mysql在之前写过一次,那时是我刚刚进入博客,今天介绍一下mysql的python交互,当然前面会把mysql基本概述一下. 目录: 一.命令脚本(mysql) 1.基本命令 2.数据库操作命令 3 ...
- MySQL和Python交互
与Python交互 python3模块名:pymysql conda install pymysql conda install sqlalchemy python2模块名:MySQLdb impor ...
- 数据库之MySQL与Python交互
准备数据 创建数据表 -- 创建 "京东" 数据库 create database jing_dong charset=utf8; -- 使用 "京东" 数据库 ...
- MySql与python交互
No1: 引入MySql:python2是Mysqldb,python3是pymysql No2: Connection对象 用于建立与数据库的连接 创建对象:调用connect()方法 conn=c ...
- Python全栈 MySQL 数据库(SQL命令大全、MySQL 、Python调用)
为了梦想与了信仰 开局一张图 主要三个方面: 1.Linux终端命令 2.MySQL语句 3.Python调用 先删库 再跑路..... ...
- MySQL 存储引擎、锁、调优、失误与事务回滚、与python交互、orm
1.存储引擎(处理表的处理器) 1.基本操作 1.查看所有存储引擎 mysql> show engines; 2.查看已有表的存储引擎 mysql> show create table 表 ...
- 四:MySQL系列之Python交互(四)
该篇主要介绍MySQL数据库的分表.以及与Python的交互的基本操作等. 一.拆分表操作 1.1 准备工作 创建数据库 --> 使用数据库 --> 创建数据表 --- 添加记录 -- ...
- Python 3.2: 使用pymysql连接Mysql
在python 3.2 中连接MYSQL的方式有很多种,例如使用mysqldb,pymysql.本文主要介绍使用Pymysql连接MYSQL的步骤 1 安装pymysql · ...
- Python 3 进阶 —— 使用 PyMySQL 操作 MySQL
PyMySQL 是一个纯 Python 实现的 MySQL 客户端操作库,支持事务.存储过程.批量执行等. PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Py ...
随机推荐
- bootstrap折叠调用collapse()后data-parent不生效问题
今天做的项目,用到了bootstrap的折叠功能,这个功能需要只展开一个折叠框,点击一个就会自动隐藏另一个,初始按照API做了一下,发现一切运行正常,但是测试的同事提了一个bug,说切换到其他模块后再 ...
- js判断值为null
今天在做项目的时候,犯了一个着实不应该的错误,拿到data为null,然后判断如果为null执行A,否则执行B 我错误的代码是 if(data===null){ A; }else{ B; } 怎么调试 ...
- eclipse运行中出错:unknown protocol: hdfs
出现这个错误因为你没有把core-site.xml和hdfs-site.xml放到项目下 程序运行开始就要调用这两个配置文件,这两个文件就是配置Hadoop时候的配置文件,只需要把至两个文件copy到 ...
- CopyOnWriteArrayList并发容器
CopyOnWriteArrayList并发容器 Copy-On-Write简称COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才 ...
- java中的内存溢出和内存泄漏
内存溢出:对于整个应用程序来说,JVM内存空间,已经没有多余的空间分配给新的对象.所以就发生内存溢出. 内存泄露:在应用的整个生命周期内,某个对象一直存在,且对象占用的内存空间越来越大,最终导致JVM ...
- mac环境下支持PHP调试工具xdebug,不需要建项目server
先让php支持xdebug 方式一: https://xdebug.org/download.php 下载相应的xdebug 可以到http://xdebug.org/wizard.php 把php ...
- SSM所需的jar
首先去找struts的. http://struts.apache.org/ 下载最新的struts 2.3.7. http://www.springsource.org/spring-framewo ...
- 从.git文件夹探析git实现原理
git是一款分布式代码版本管理工具,通过git能够更加高效地协同编程.了解git的工作原理将有助于我们使用git工具更好地管理项目.通过了解.git文件夹中的文件组成,我们可以从一个角度去窥探git的 ...
- 如何优化Cocos2d-X游戏的内存
在游戏项目优化中都会碰到一个问题,如何既能减少内存又能尽量减少包的大小?在实际项目中有些经验分享一下,事实上2D游戏中最占内存的就是图片资源,一张图片使用不同的纹理格式带来的性能差异巨大,下表是我在I ...
- 为Spark Application指定不同的JDK版本
随着企业内部业务系统越来越多,基于JVM的服务,通常情况线上环境可能会有多套JDK跑不同的服务.大家都知道基于高版本的Java规范编写的服务跑在低版本的JVM上会出现:java.lang.Unsupp ...