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 ...
随机推荐
- hibernate的集合映射(详细笔记)
- position,display,float,overflow,margin,padding之间的相互影响
1.元素分为块级元素和行内元素, 块级元素可以设置宽高,会自动换行,并且会发生相邻margin的合并问题.行内元素设置宽和高无效,以水平方向排列,(行内元素,绝对定位,浮动元素不会发生外边距合并)并且 ...
- glog 使用
glog 使用 来源:http://www.cnblogs.com/tianyajuanke/archive/2013/02/22/2921850.html 一.安装配置 1.简介 google 出的 ...
- Hive安装和部署
在root的用户下搭建的 构建hive之前必须要先搭建好hadoop才可以. hive定义了一种类似SQL查询语言--HQL 类似SQL ,但是不完全相同 Hive是一个数据仓库,它部署在Hadoop ...
- Ajax comet XMLHttpRequest 异步
function createXHR() { if (typeof XMLHttpRequest != “undefi ned”){ return new XMLHttpRequest(); ...
- Windows命令行command的Shell命令详细解析和语法
CMD命令大全及详细解释和语法 Microsoft Windows XP [版本 5.1.2600] 有关某个命令的详细信息,请键入 HELP 命令名 ASSOC 显示或修改文件扩展名关联. A ...
- 分享一个单例模型类Singleton代码
相关代码: ; foreach (string key in dict.Keys) { if (cou ...
- [转载] Cassandra入门 框架模型 总结
转载自http://asyty.iteye.com/blog/1202072 一.Cassandra框架二.Cassandra数据模型 Colum / Colum Family, SuperColum ...
- 获取IP-linux(经典-实用)
Linux系统获取网卡ip 1.正宗的有6种取ip的方法 sed(3) +awk(2)+egrep(1) sed(替换): ( )\1 [^0-9.] 掐头|去尾 awk(分隔符): ...
- JavaWeb框架SSH_Struts2_(二)
1. Struts2的核心配置(详解) 本章内容目录: 配置struts.xml文件 struts.xml文件 常量配置 包配置 包含配置 Action配置 实现Action控制类 配置Action ...