python mysql数据库操作
一、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数据库操作的更多相关文章
- 10分钟教你Python+MySQL数据库操作
欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 本文介绍如何利用python来对MySQL数据库进行操作,本文将主要从以下几个方面展开介绍: 1.数据库介绍 2.MySQL数据库安装和设置 ...
- Python/MySQL(四、MySQL数据库操作)
Python/MySQL(四.MySQL数据库操作) 一.数据库条件语句: case when id>9 then ture else false 二.三元运算: if(isnull(xx)0, ...
- Python进行MySQL数据库操作
最近开始玩Python,慢慢开始喜欢上它了,以前都是用shell来实现一些自动化或者监控的操作,现在用Python来实现,感觉更棒,Python是一门很强大的面向对象语言,所以作为一个运维DBA或者运 ...
- Python数据存储 — MySQL数据库操作
本地安装MySQL 调试环境python3.6,调试python操作mysql数据库,首先要在本地或服务器安装mysql数据库. 安装参考:https://mp.csdn.net/postedit/8 ...
- python之(mysql数据库操作)
前言:关心3步骤(此文章只针对python自动化根基展开描述) 什么是mysql数据库操作? 答:利用python对mysql数据库进行增, 删, 改, 查 操作 为什么要用python对mysql ...
- php : mysql数据库操作类演示
设计目标: 1,该类一实例化,就可以自动连接上mysql数据库: 2,该类可以单独去设定要使用的连接编码(set names XXX) 3,该类可以单独去设定要使用的数据库(use XXX): 4,可 ...
- php MySQL数据库操作类源代码
php MySQL数据库操作类源代码: <?php class MySQL{ private $host; //服务器地址 private $name; //登录账号 private $pwd; ...
- 设计模式 - 单例模式mysql数据库操作类
待续... index.php 调用方法: <?php header('Content-Type:text/html; charset=utf8'); require 'instance.php ...
- python之数据库操作(sqlite)
python之数据库操作(sqlite) 不像常见的客户端/服务器结构范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分.所以主要的通信协议是在编程语言内的直接A ...
随机推荐
- 前端axios下载excel,并解决axios返回header无法获取所有数据的问题
需求:通过后端接口下载excel文件,后端没有文件地址,返回二进制流文件 实现:axios(ajax类似) 主要代码: axios:设置返回数据格式为blob或者arraybuffer 如: var ...
- 开发谷歌浏览器插件会上瘾,搞了一个JSONViewer,一个页面格式化多条JSON,提升工作效率
最近写了一个谷歌浏览器插件(Chrome extension),拿出来分享下,希望能提升大家的工作效率. 一.背景 先说痛点:日常开发中,经常需要不停的把接口输出的JSON拷贝到在线JSON格式化页面 ...
- c# 使用迭代器来创建可枚举类型
class Program { public IEnumerator<string> GetEnumerator() { IEnumerable<string> my = Bl ...
- 【Java每日一题】20170227
20170224问题解析请点击今日问题下方的“[Java每日一题]20170227”查看(问题解析在公众号首发,公众号ID:weknow619) package Feb2017; import jav ...
- spring-framework-中文文档三:依赖注入DI
5.4依赖性 典型的企业应用程序不包含单个对象(或Spring的说法中的bean).即使最简单的应用程序也有几个对象一起工作来展示最终用户将其视为一个连贯的应用程序.下一节将介绍如何从定义许多独立的b ...
- cf1139D. Steps to One(dp)
题意 题目链接 从\([1, M]\)中随机选数,问使得所有数gcd=1的期望步数 Sol 一个很显然的思路是设\(f[i]\)表示当前数为\(i\),期望的操作轮数,转移的时候直接枚举gcd \(f ...
- django模型基础(三)
本文转载自https://blog.csdn.net/xiaogeldx/article/details/88084034 表关系 一对一(OneToOne) 通过本表的主键外键关联另一张表的主键 创 ...
- mybatis 自动生成文件配置
maven 依赖配置: <!-- sql server --><dependency> <groupId>com.microsoft.sqlserver</g ...
- ThinkPHP框架知识
php框架 一.真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困难,代码风格 ...
- git 入门教程之回到过去
回到过去 背景 现在你已经掌握git的基本操作了,文件发生更改首先使用 git add 添加更改,然后 git commit 提交全部更改,当本地文件再次发生更改时,仍然需要git add 和 git ...