pymysql
时间:2019-10-22
本文章向大家介绍pymysql,主要包括pymysql使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
python中pymysql模块
# 实现:使用Python实现用户登录,如果用户存在则登录成功(假设该用户已在数据库中)
import pymysql
user = input('请输入用户名:')
pwd = input('请输入密码:')
# 1.连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='', db='db8', charset='utf8')
# 2.创建游标
cursor = conn.cursor()
#注意%s需要加引号
sql = "select * from userinfo where username='%s' and pwd='%s'" %(user, pwd)
print(sql)
# 3.执行sql语句
cursor.execute(sql)
result=cursor.execute(sql) #执行sql语句,返回sql查询成功的记录数目
print(result)
# 关闭连接,游标和连接都要关闭
cursor.close()
conn.close()
if result:
print('登陆成功')
else:
print('登录失败')
二、execute()之sql注入
最后那一个空格,在一条sql语句中如果遇到select * from userinfo where username='app01' -- asadasdas' and pwd='' 则--之后的条件被注释掉了(注意--后面还有一个空格)
#1、sql注入之:用户存在,绕过密码
app01' -- 任意字符
#2、sql注入之:用户不存在,绕过用户与密码
xxx' or 1=1 -- 任意字符
#解决
# 原来是我们对sql进行字符串拼接
# sql="select * from userinfo where name='%s' and password='%s'" %(username,pwd)
# print(sql)
# result=cursor.execute(sql)
#改写为(execute帮我们做字符串拼接,我们无需且一定不能再为%s加引号了)
sql="select * from userinfo where name=%s and password=%s" #!!!注意%s需要去掉引号,因为pymysql会自动为我们加上
result=cursor.execute(sql,[user,pwd]) #pymysql模块自动帮我们解决sql注入的问题,只要我们按照pymysql的规矩来。
三、增 删 改 :一定要commit
import pymysql
# use = input('请输入用户名:')
# pwd = input('请输入密码:')
conn = pymysql.connect( host='localhost',
user='root',
password="123",
database='db8',
port=3306,
charset='utf8')
cursor = conn.cursor()
# sql = 'select * from userinfo where name = %(username)s and pwd = %(pwd)s ;'
# sql = 'insert into userinfo(name,pwd) values(%s,%s)'
# sql = 'update userinfo set name = %s where id=6'
sql = 'truncate table userinfo'
print(sql)
#增
'''插入一条数据用 execute'''
# res = cursor.execute(sql,[use,pwd])
'''插入多条数据使用executmany'''
# res = cursor.executemany(sql,[('李四','88888888'),('王五','666666')])
#改
# res = cursor.execute(sql,[use])
#删
res = cursor.execute(sql)
print(res)
'''注意这里-增--删--改- 操作的时候一定要加commit不然是写不进数据库的'''
conn.commit()
cursor.close()
conn.close()
四、查:fetchone,fetchmany,fetchall
游标移动位置:scroll(int,mode='relative')
relative 相对于自己进行移动
absolute 相对于左上角原点进行移动
import pymysql
conn = pymysql.connect( host='localhost',
user='root',
password="123",
database='db8',
port=3306,
charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 原本返回的数据是一个大元组里有多个小元组,这里设置了就变成了一个列表里有多个字典
#查
sql = 'select * from userinfo'
cursor.execute(sql) # 执行命令
# row= cursor.fetchone() #返回的结果 获取下一行数据,以第一行为为首行
# print(row)
# row= cursor.fetchone()
# print(row)
# row = cursor.fetchall() #获取全部数据
row = cursor.fetchmany(8) # 获取多条数据,默认为0只获取第一条数据,加了数值就是获取几条数据,如果值比数据的条数大就获取全部
#-1不获取最后一条数据
#-2不获取最后两条数据
'''游标移动位置'''
cursor.scroll(2,mode='absolute') # 以左上角的原点为参照物进行移动,0为第一行的开始位置
row = cursor.fetchone()
print(row)
cursor.scroll(-1,mode='relative') #向对于本身进行移动,负值为向上,正值为向下
row = cursor.fetchone()
print(row)
cursor.close() #关闭游标
conn.close() #关闭连接
原文地址:https://www.cnblogs.com/whileke/p/11718914.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Redis 备份、容灾及高可用实战
- 容器技术|Docker三剑客之Compose
- ProxySQL+Mysql实现数据库读写分离实战
- 打造高逼格、可视化的Docker容器监控系统平台
- 企业面试题|最常问的MySQL面试题集合(一)
- 深入理解消息中间件技术之RabbitMQ服务
- 手把手从0开始教你搭建Jumpserver,为服务器安全保驾护航!
- 企业面试题|最常问的MySQL面试题集合(二)
- 值得一看的35个Redis面试题总结
- 容器技术|Docker三剑客之docker-machine
- 企业面试题|最常问的MySQL面试题集合(三)
- 「微服务架构」API版本控制最佳实践介绍
- 2020年最新字节、阿里、腾讯、爱奇艺等BAT Android社招高频面试题,押题99.98%!
- 使用镜像部署 Hexo 静态页面
- 基于zmq RPC简单C++实现