一、pymysql 模块安装(本文博客推荐https://www.cnblogs.com/clschao/articles/10023248.html

pip3 install pymysql

二、pymysql 方法介绍及其简单使用(增删改查:conn.commit( ))

  #注:以下出现的cursor都表示游标

  1、conn=pymysql.connect(host=,port=,user=,password=,database=,charset=)     连接mysql服务器

  2、cursor=conn.cursor()  创建游标,如cmd中的 mysql> ,返回数据为元组

     cursor=conn.cursor(cursor=pymysql.cursor.DictCursor)   #创建游标,返回数据元素为字典

  3、cursor.execute( "mysql语句")  执行mysql 语句, 参数为字符串类型的maysql语句,cursor是游标

  4、cursor.fetchone( )  获取一个数据

       cursor.fetchmany(n ) 获取 n个数据

       cursor.fetchall( )  获取从游标位置到最后的所有的数据

  5、cursor.scroll( n,'absolute') 绝对路径下游标往下跳过n条数据

       cursor.scroll( n,'relative') 绝对路径下游标往下跳过n条数据

  6、cursor.close( ) 关闭游标

     conn.close( ) 关闭连接

import pymysql

conn=pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='',
database='day03',
charset='utf8'
) #前提先启动mysql服务器 #输出数据的时候,根据游标往后取值
cursor=conn.cursor() #创建游标 mysql> mysql_cmd="select * from employee;" #命令语句str cursor.execute(mysql_cmd) #执行命令行语句 print(cursor.fetchone()) #获取一条数据 print("------------xxxx-------------") cursor.scroll(3,'relative') #相对路径游标往下跳过条数据 print(cursor.fetchall()) #获取所有数据 cursor.scroll(3,'absolute') #绝对路径游标往下跳过条数据 print(cursor.fetchone()) #获取一条数据

  

  

一、mysql注入(登陆)

  数据表单userinfo:

    

import pymysql

#与数据库建立连接:host,post,user,password,database,charset;
conn=pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='',
database='day04',
charset='utf8'
) #输入需要匹配的元素
username=input("请输入用户名") #如:alex'
password=input("请输入密码") #如:123' #建立游标 mysql>
cursor=conn.cursor() #默认输出元组(( ,),( ,)...) verify="select * from userinfo where uname = '%s and pword = %s;"%(username,password) #数据类型 都是字符串char(20) print(verify) ret=cursor.execute(verify) print("影响的数据条数",ret)
if ret:
print("登录成功!")
else:
print("登录失败!!!")
cursor.close() #关闭游标
conn.close() #关闭连接

1、普通用户登陆

2、只知道账户进行登陆(bug登陆)

3、账户密码都不知,我TMD还是要登陆。(bid_bug)

 

总结咱们刚才说的两种sql注入的语句
#1、sql注入之:用户存在,绕过密码
chao' -- 任意字符 #2、sql注入之:用户不存在,绕过用户与密码
xxx' or 1=1 -- 任意字符

 

  满满的bug,登陆形同虚设,解决方案提供两个;

 (1):re 表达式

 (2):mysql提供了数据处理机制(cursor.execute(mysl语句,[参数]))|cursor.executemany(mysl语句,[参数1,参数2...]))

仅需优化两条语句:
verify="select * from userinfo where uname = %s and pword = %s;" #数据类型 都为字符串char(20)
ret=cursor.execute(verify,[username,password])
import pymysql

#与数据库建立连接:host,post,user,password,database,charset;
conn=pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='',
database='day04',
charset='utf8'
) #输入需要匹配的元素
username=input("请输入用户名:") #如:alex'
password=input("请输入密码:") #如:123 #建立游标 mysql>
cursor=conn.cursor() #默认输出元组(( ,),( ,)...) verify="select * from userinfo where uname = %s and pword = %s;" #数据类型 都为字符串char(20) print(verify) ret=cursor.execute(verify,[username,password]) print("影响的数据条数",ret)
if ret:
print("登录成功!")
else:
print("登录失败!!!")

mysql注入优化

三、增删改:conn.commit( ) 把执行的结果写入数据库 (此步骤必不可少,否则操作无效)

  查操作在上面已经说完了,我们来看一下增删改,也要注意,sql语句不要自己拼接,交给excute来拼接

import pymysql
#链接
conn=pymysql.connect(host='localhost',port='',user='root',password='',database='crm',charset='utf8')
#游标
cursor=conn.cursor() #执行sql语句
#part1
# sql='insert into userinfo(name,password) values("root","123456");'
# res=cursor.execute(sql) #执行sql语句,返回sql影响成功的行数
# print(res)
# print(cursor.lastrowid) #返回的是你插入的这条记录是到了第几条了 #part2
# sql='insert into userinfo(name,password) values(%s,%s);'
# res=cursor.execute(sql,("root","123456")) #执行sql语句,返回sql影响成功的行数
# print(res)
#还可以进行更改操作:
#res=cursor.excute("update userinfo set username='taibaisb' where id=2")
#print(res) #结果为1 #part3
sql='insert into userinfo(name,password) values(%s,%s);'
res=cursor.executemany(sql,[("root",""),("lhf",""),("eee","")]) #执行sql语句,返回sql影响成功的行数,一次插多条记录
print(res)
#上面的几步,虽然都有返回结果,也就是那个受影响的函数res,但是你去数据库里面一看,并没有保存到数据库里面,
conn.commit() #必须执行conn.commit,注意是conn,不是cursor,执行这句提交后才发现表中插入记录成功,没有这句,上面的这几步操作其实都没有成功保存。
cursor.close()
conn.close()

四、查:fetchone,fetchmany,fetchall

import pymysql
#链接
conn=pymysql.connect(host='localhost',user='root',password='',database='egon')
#游标
cursor=conn.cursor() #执行sql语句
sql='select * from userinfo;'
rows=cursor.execute(sql) #执行sql语句,返回sql影响成功的行数rows,将结果放入一个集合,等待被查询 # cursor.scroll(3,mode='absolute') # 相对绝对位置移动
# cursor.scroll(3,mode='relative') # 相对当前位置移动
res1=cursor.fetchone()
res2=cursor.fetchone()
res3=cursor.fetchone()
res4=cursor.fetchmany(2)
res5=cursor.fetchall()
print(res1)
print(res2)
print(res3)
print(res4)
print(res5)
print('%s rows in set (0.00 sec)' %rows) conn.commit() #提交后才发现表中插入记录成功
cursor.close()
conn.close() '''
(1, 'root', '123456')
(2, 'root', '123456')
(3, 'root', '123456')
((4, 'root', '123456'), (5, 'root', '123456'))
((6, 'root', '123456'), (7, 'lhf', '12356'), (8, 'eee', '156'))
rows in set (0.00 sec)
'''

python mysql数据库操作的更多相关文章

  1. 10分钟教你Python+MySQL数据库操作

    欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 本文介绍如何利用python来对MySQL数据库进行操作,本文将主要从以下几个方面展开介绍: 1.数据库介绍 2.MySQL数据库安装和设置 ...

  2. Python/MySQL(四、MySQL数据库操作)

    Python/MySQL(四.MySQL数据库操作) 一.数据库条件语句: case when id>9 then ture else false 二.三元运算: if(isnull(xx)0, ...

  3. Python进行MySQL数据库操作

    最近开始玩Python,慢慢开始喜欢上它了,以前都是用shell来实现一些自动化或者监控的操作,现在用Python来实现,感觉更棒,Python是一门很强大的面向对象语言,所以作为一个运维DBA或者运 ...

  4. Python数据存储 — MySQL数据库操作

    本地安装MySQL 调试环境python3.6,调试python操作mysql数据库,首先要在本地或服务器安装mysql数据库. 安装参考:https://mp.csdn.net/postedit/8 ...

  5. python之(mysql数据库操作)

    前言:关心3步骤(此文章只针对python自动化根基展开描述) 什么是mysql数据库操作?  答:利用python对mysql数据库进行增, 删, 改, 查 操作 为什么要用python对mysql ...

  6. php : mysql数据库操作类演示

    设计目标: 1,该类一实例化,就可以自动连接上mysql数据库: 2,该类可以单独去设定要使用的连接编码(set names XXX) 3,该类可以单独去设定要使用的数据库(use XXX): 4,可 ...

  7. php MySQL数据库操作类源代码

    php MySQL数据库操作类源代码: <?php class MySQL{ private $host; //服务器地址 private $name; //登录账号 private $pwd; ...

  8. 设计模式 - 单例模式mysql数据库操作类

    待续... index.php 调用方法: <?php header('Content-Type:text/html; charset=utf8'); require 'instance.php ...

  9. python之数据库操作(sqlite)

    python之数据库操作(sqlite) 不像常见的客户端/服务器结构范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分.所以主要的通信协议是在编程语言内的直接A ...

随机推荐

  1. [转]WEB页获取串口数据

    本文转自:https://www.cnblogs.com/rockyhm/p/3434200.html 最近做一个B/S的项目,需要读取电子秤的值,之前一直没做过,也没有经验,于是在网上找到很多  大 ...

  2. vue-element-admin项目install出现的问题

    1.需要安装nodejs和git 2. 配置淘宝镜像源(经常是因为墙的原因下载缓慢或者出错) npm config set registry https://registry.npm.taobao.o ...

  3. [angularjs] angularjs系列笔记(四)过滤器

    过滤器可以使用一个管道字符(|)添加到表达式和指令中,这不就是模板函数吗 <body> <div ng-app="Home"> <div ng-con ...

  4. Java java jdbc thin远程连接并操作Oracle数据库

    JAVA jdbc thin远程连接并操作Oracle数据库 by:授客 QQ:1033553122 测试环境 数据库:linux 下Oracle_11g_R2 编码工具:Eclipse 编码平台:W ...

  5. elementUI vue tree input 懒加载 输入下拉树型示例 点击其他区域关闭自定义div

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  6. BZOJ4805: 欧拉函数求和(杜教筛)

    4805: 欧拉函数求和 Time Limit: 15 Sec  Memory Limit: 256 MBSubmit: 614  Solved: 342[Submit][Status][Discus ...

  7. loj#2483. 「CEOI2017」Building Bridges(dp cdq 凸包)

    题意 题目链接 Sol \[f[i], f[j] + (h[i] - h[j])^2 + (w[i - 1] - w[j]))\] 然后直接套路斜率优化,发现\(k, x\)都不单调 写个cdq就过了 ...

  8. Vue基础01vue的基本示例,vue的双向数据绑定,vue中常见的几种用法,vue相关常见指令

    自学vue框架,每天记录重要的知识点,与大家分享!有不足之处,希望大家指正. 本篇将讲述:vue的基本示例,vue的双向数据绑定,vue中常见的几种用法,vue相关常见指令 前期学习基础,使用vue. ...

  9. Openlayer3中应用的技术

    ol3-ext有很多很丰富的效果,可以不用重复造轮子,ol3-ext示例大全:http://viglino.github.io/ol3-ext/ 在本次项目中使用到了ol3-ext的两个功能:图层管理 ...

  10. 8.Odoo产品分析 (二) – 商业板块(3) –CRM(2)

    查看Odoo产品分析系列--目录 接上一篇Odoo产品分析 (二) – 商业板块(3) –CRM(1) 4. 设置 在配置–>设置中:    在分析"销售"模块时已经将其他的 ...