pymysql模块

pymysql是用python控制终端对MySQL数据库进行操作的第三方模块

import pymysql
# 1.连接数据库
client = pymysql.connect(
# 地址
host='127.0.0.1',
# 数据库端口
port=3306,
# 用户名,要加引号
user='root',
# 密码,要加引号
password='',
# 文件夹
database='db2',
# 设置字符编码不能写成了utf-8
charset='utf8',
# 设置自动提交命令,如不设置则无法提交命令进行增,改,删操作
autocommit=True
) # 2.获取游标对象 ——————》可以通过游标来提交SQL命令,
# cursor_obj = client.cursor() 以元组形式返回
# pymysql.cursors.DictCursor 将查询出来的结果制作成字典形式返回
cursor_obj = client.cursor(pymysql.cursors.DictCursor) # 3.通过execute提交SQL语句
# SQL语句要用引号,不要加 ; 号
sql = 'select * from emp'
# 提交SQL语句
cursor_obj.execute(sql) # 4.提交后,通过cursor_obj.fetchall()获取查询游标后的全部的结果
res = cursor_obj.fetchone() # 只获取游标后的一条结果
res = cursor_obj.fetchall() # 获取查询游标后的全部的结果
res = cursor_obj.fetchmany(3) # 指定获取游标后的几条数据,可以超过不会报错
# 获取的是列表套字典
# print(res)
for dic in res:
print(dic) # 5.关闭游标
cursor_obj.close() # 6.关闭客户端连接
client.close()

游标的相对移动和绝对移动

print(cursor_obj.fetchone())    #获取一个结果
print(cursor_obj.fetchone())
print(cursor_obj.fetchall()) #获取所有结果
# print(cursor.fetchmany(2)) # 指定获取几条数据 如果数字超了也不会报错 >>>{'id': 1, 'name': 'Mr沈', 'sex': 'male', 'age': 17}
{'id': 2, 'name': 'tate', 'sex': 'male', 'age': 18}
[{'id': 3, 'name': 'ank', 'sex': 'male', 'age': 18},{'id': 4, 'name': 'vicky', 'sex': 'female', 'age': 18}]

如果想控制游标的移动位置来获取结果可以用相对移动或绝对移动

相对移动:cursor.scroll(2, 'relative')  # 基于指针所在的位置往后偏移两位,下次获取就获取指针后的数据
绝对移动:cursor.scroll(1, 'absolute') #基于起始位置往后偏移1位

SQL注入问题

SQL注入问题:利用特殊符号和注释语法,巧妙的绕过真正的SQL校验

解决方法:关键性的数据校验,不要手动拼接,execute会自带拼接功能,可以解决这个问题

import pymysql
client = pymysql.connect(
host='127.0.0.1',
port=3306,
database='day36',
user='root',
password='',
charset='utf8',
autocommit=True
)
cursor_obj = client.cursor(pymysql.cursors.DictCursor)
username = input('请输入用户名').strip()
password = input('请输入密码:').strip()
# sql = 'select * from db where username="%s" and password="%s"'%(username,password) # 此处%s必须要加引号
sql = 'select * from db where username="%s" and password="%s"' # 此处%s可以不用加引号
print(sql)
res = cursor_obj.execute(sql,(username,password)) # 自带拼接功能将execute后的参数与SQL一一对应传入,只能替换%占位符
if res:
print(res) # 显示所有操作的数据条数
else:
print('用户名或密码错误') #请输入用户名wqjed" or 2=2 -- wqjdkef
# 请输入密码:
# select * from db where username="wqjed" or 2=2 -- wqjdkef" and password=""
# # 请输入用户名shen" -- weiqfewq
# 请输入密码:
# select * from db where username="shen" -- weiqfewq" and password=""
#

数据的增删改查

import pymysql

# 连接数据库函数
def client_mysql():
client = pymysql.connect(
host='127.0.0.1',
port=3306, # 端口号不能加引号
user='root',
password='',
database='db2',
charset='utf8',
autocommit=True
)
cursor_obj = client.cursor(pymysql.cursors.DictCursor)
return cursor_obj, client # 关闭数据库函数
def close_client():
cursor_obj, client = client_mysql()
cursor_obj.close()
client.close() cursor_obj, client = client_mysql()
# 插入数据
# 插入表格
sql = 'create table user(id int primary key,name varchar(20))'
cursor_obj.execute(sql)
# 插入数据
s = 'insert into user(id,name) values(7,"vicky")'
cursor_obj.execute(s) # 查看数据
res = 'select * from user'
cursor_obj.execute(res)
res = cursor_obj.fetchall()
print(res) # 更新数据
try:
sql = 'update user set name="shen" where id=7'
cursor_obj.execute(sql)
except Exception as e:
print(e)
res = 'select * from user'
# 查看更新后的数据
cursor_obj.execute(res)
res = cursor_obj.fetchall()
print(res) # 删除数据
sql = 'delete from user'
cursor_obj.execute(sql)
# 查看更新后的数据
res = 'select * from user'
cursor_obj.execute(res)
res = cursor_obj.fetchall()
print(res)
# 关闭连接
close_client()

python连接MySQL pymysql模块,游标,SQL注入问题,增删改查操作的更多相关文章

  1. python web.py操作mysql数据库,实现对数据库的增删改查操作

    使用web.py框架,实现对mysql数据库的增删改查操作: 该示例代码中连接的是本地数据库testdb,user表,表结构比较简单,只有两个字段:mobile和passwd,类型均为字符型 实际应用 ...

  2. python利用xmlrpc方式对odoo数据表进行增删改查操作

    # -*- encoding: utf-8 -*- import xmlrpclib #导入xmlrpc库,这个库是python的标准库. username ='admin' #用户登录名 pwd = ...

  3. 第二百八十一节,MySQL数据库-SQL注入和pymysql模块防止SQL注入

    MySQL数据库-SQL注入和pymysql模块防止SQL注入 SQL注入就是通过SQL语句绕开程序判断,获取到数据库的内容 下面以一个简单的程序登录SQL注入举例: 正常登录 1.数据库有一张会员表 ...

  4. 数据库——可视化工具Navicat、pymysql模块、sql注入问题

    数据库--可视化工具Navicat.pymysql模块.sql注入问题 Navicat可视化工具 Navicat是数据库的一个可视化工具,可直接在百度搜索下载安装,它可以通过鼠标"点点点&q ...

  5. 【Python + Mysql】之用pymysql库连接Mysql数据库并进行增删改查操作

    用pip下载pymysql并引用 具体请参考文章: <Python之MySQL数据库增删改查操作> <python3.6 使用 pymysql 连接 Mysql 数据库及 简单的增删 ...

  6. python3.6 使用 pymysql 连接 Mysql 数据库及 简单的增删改查操作

    1.通过 pip 安装 pymysql 进入 cmd  输入  pip install pymysql   回车等待安装完成: 安装完成后出现如图相关信息,表示安装成功. 2.测试连接 import ...

  7. 通过jdbc连接MySql数据库的增删改查操作

    一.获取数据库连接 要对MySql数据库内的数据进行增删改查等操作,首先要获取数据库连接 JDBC:Java中连接数据库方式 具体操作如下: 获取数据库连接的步骤: 1.先定义好四个参数 String ...

  8. 48.Python中ORM模型实现mysql数据库基本的增删改查操作

    首先需要配置settings.py文件中的DATABASES与数据库的连接信息, DATABASES = { 'default': { 'ENGINE': 'django.db.backends.my ...

  9. python 全栈开发,Day124(MongoDB初识,增删改查操作,数据类型,$关键字以及$修改器,"$"的奇妙用法,Array Object 的特殊操作,选取跳过排序,客户端操作)

    一.MongoDB初识 什么是MongoDB MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介 ...

随机推荐

  1. 《Vue笔记01: 我与唐金州二三事》

    最近我在收看唐金州在极客时间发布的<vue从入门到精通>,颇有收获. 唐金州,一点资讯前端技术专家,曾在蚂蚁金服就职,也是开源组件库ant design vue的作者,虽然唐老师写的ant ...

  2. Tesseract.js 一个几乎能识别出图片中所有语言的JS库

    Tesseract.js 一个几乎能识别出图片中所有语言的JS库. 官网:http://tesseract.projectnaptha.com/ git:https://github.com/napt ...

  3. VUE组件 之 Drawer 抽屉

    注:因为项目中用的是 element-ui 框架,而这个框架并没有抽屉组件,所以自己实现一个. 一.源码地址 https://github.com/imxiaoer/DrawerForVue 二.效果 ...

  4. IP安全,DDoS攻击、tearDrop攻击和微小IP碎片攻击

    目录 arp安全 IP报文格式 DoS攻击 tear drop攻击 微小碎片攻击 IP欺骗,留后门 arp安全 以太网帧的type =0806 表示arp arp攻击:hack伪造arp应答包给tar ...

  5. [Go]TCP服务中读写进行协程分离

    读写两部分进行一下分离,中间通过chan进行传递数据 ,这样可以方便的在write中进行一些业务处理 single/snet/tcpconn.go package snet import ( &quo ...

  6. Shell—详解$0、$1、$2、$#、$*、$@、$?、$$变量

    预定义变量:常用来获取命令行的输入 变量 作用 $0 当前Shell脚本本身的文件名称 $1 脚本接收的第一个参数($1-$9:第1-9个命令行参数名) $2 脚本接收的第二个参数($1-$9:第1- ...

  7. centos7 配置阿里镜像

    1. 备份原来的yum源 cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 2.设置aliyun的y ...

  8. 012.MongoDB读写分离

    一 读写分离概述 1.1 读写分离描述 从应用程序角度来看,使用Replica Set 和使用单台mongo很像.默认的驱动程序会连接primary节点,并且将所有读写请求都路由到主节点.但也可以通过 ...

  9. 在项目中常用的JS方法封装

    使用方法简单,只需要放在你的 utils.js 工具文件中,直接export const 加上下面封装方法,在别的文件中使用 {方法1,方法2,方法3...}引用后直接使用即可. 01.输入一个值.返 ...

  10. 51和32共用keil5方法

    链接:https://blog.csdn.net/qq_41639829/article/details/81813992 看这位道友写的方法挺好的,可以实现共用,不过有点小问题是,安装 以后,用32 ...