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 ...
随机推荐
- 2017 多校训练 1006 Function
Function Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total ...
- 分酒问题(DFS解法)
题目大概是这样: 已知有三个容量分别为3千克.5千克和8千克的并且是没有刻度的酒瓶,3千克和5千克的瓶子均装满了酒,而8千克的瓶子为空.现要求仅用这三个酒瓶将这些酒均分为两个4千克并分别装入5千克和8 ...
- css之定位(position)
1.什么是定位: css中的position属性,position有四个值:absolute/relative/fixed/static(绝对/相对/固定/静态(默认))通过定位属性可以设置一些不规则 ...
- cloneNode克隆节点在不同浏览器的差异
cloneNode是用于克隆节点的,如果待克隆的节点还有子节点以及自定义属性.添加的有事件,那么克隆时,可以指定是克隆节点本身,还是将其所有子节点信息也克隆进去,这是通过给cloneNode传递一个布 ...
- Red Hat 7.0 DNS服务配置笔记
先挂载镜像,然后配置yum,然后安装yum install -y bind 配置静态 IP.DNS就是他本身的IP地址. 修改DNS的配置文件,在后面加入区域配置信息.vim /etc/named.c ...
- 关于ThinkPHP中的时间自动填充
<?php class NewsModel extends Model{ protected $_auto = array( array('time_at','mydate','1','call ...
- 一起写框架-Ioc内核容器的实现-基础功能-getBean(五)
实现的功能 1. 启动程序时,将@ComponentScan加载的类,创建对象并放在容器里面.(查看上一篇文) 2. 通过ApplicatoinContext的getBean()方法获得容器里面的对象 ...
- TFS在项目中Devops落地进程(上)
经过近2年折腾,基于TFS的Devops主线工程大体落地完毕.在此大体回忆下中间的各种历程. 开始之前简单说下什么是TFS(Team Foundation Server). TFS是微软推出的一款AL ...
- 浅谈字体小图标font awesome,iconfont,svg各自优缺点
三种都是矢量图(即放大不失真),但是个自又有个自的优缺点, 1.font awesome: 优点:相对比较简单,查看官网看例子基本上都会用 (http://www.bootcss.com/p/font ...
- Set的常用方法(java)
一.新增:重复新增的值会被覆盖 代码: Set<String> ss=new HashSet<String>(); ss.add("a");ss.add(& ...