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 ...
随机推荐
- [转]Angular4首页加载慢优化之路
本文转自:https://blog.csdn.net/itest_2016/article/details/80048398 Angular是一个比较完善的前端MVC框架,包含了模板,数据双向绑定,路 ...
- C#比较两个对象是否为同一个对象。
两个对象是否为同一个对象:是看两个对象是否指向堆中的同一块内存. 1.使用object.ReferenceEquals() class Program { static void Main(strin ...
- 【转载】阿里云ECS Linux服务器禁止某些IP访问
在阿里云ECS Linux服务器运维过程中,如果发现某些IP访问异常,如怀疑有攻击行为或者怀疑是别人写的爬虫程序长时间占用你的服务器资源,则可以通过相关的设置来禁止这些IP段的访问,拒绝这些IP的请求 ...
- SQL Server 分页编号的另一种方式
今天看书讲T-SQL,看到了UNBOUNDED PRECEDING,就想比对下ROW_NUMBER()的运行速度. sql及相关的结果如下,数据库中的数据有5W+. ROW_NUMBER(): SET ...
- ASP.NET Core中的Startup类
ASP.NET Core程序要求有一个启动类.按照惯例,启动类的名字是 "Startup" .Startup类负责配置请求管道,处理应用程序的所有请求.你可以指定在Main方法中使 ...
- [日常] HTTP的媒体类型
HTTP的媒体类型 1.MIME类型的数据格式标签(MultIpurpose Internet Mail Extension) 2.最初用于电子邮件系统之间搬移,多用途互联网邮件扩展 3.MIME类型 ...
- 买or不买?如何测试博彩公司赔率是否合理?
世界杯期间,烧烤店.酒吧都热闹起来了,柔柔我的朋友圈也热闹起来了,有酱紫的: 还有酱紫的: 然后还有酱紫的: 酱紫的: 当然天台也是一如既然的热闹: 似乎人人都在输钱,那真正的赢家在哪里呢?博彩业的真 ...
- Aurelia binding
今天介绍一下使用Aurelia binding 模块绑定HTML属性/事件的方式.我们依然使用之前创建的代码例子. Aurelia binding 绑定属性或者方法的通用模式就是 XXX.comman ...
- vuejs-指令详解
v-if v-if指令可以完全根据表达式的值在DOM中生成或移除一个元素.如果v-if表达式赋值为false,那么对应的元素就会从DOM中移除:否则,对应元素的一个克隆将被重新插入DOM中,代码如下: ...
- 一个JVM进程启动后里面有几个线程
在写Java程序时,通常我们管只有一个main函数(而没有别的Thread或Runnable的程序)叫单线程程序.但是我们写的这个所谓的单线程程序只是JVM这个程序中的一个线程,JVM本身是一个多线程 ...