一、mysql数据备份与恢复

(一)数据库的备份与恢复

  数据库备份的语法如下:

mysqldump -h 服务器 -u用户名 -p密码 --database(databases) 数据库名 > 备份文件.sql

1、单数据库的备份与恢复

  数据库的备份:

  数据库的恢复:

2、多数据库的备份与恢复

  数据库的备份:

  数据库的恢复:

3、所有数据库的备份与恢复

  数据库的备份:

  数据库的恢复:

  总结:通过上述实例讲解可以看出,备份语法中使用的是大于号,大于号右侧即为指定生成的sql文件的路径,无论单数据库还是多数据库的备份,最终都只生成一个.sql文件,所以三种情况的数据库的恢复语法是一样的,语法中小于号右侧即是备份的.sql文件的路径。

 (二)表的备份与恢复

  也可以对一个数据库下的一个或者多个表进行备份,备份与恢复必须指定数据库,表的备份语法如下:

mysqldump -h 服务器 -u用户名 -p密码  数据库名  表名1 表名2...> 备份文件.sql

  备份表:

  恢复表:

(三)表的导入与导出

在执行表的导出的时候可能会报“'secure_file_priv' ”错误,原因为:数据库最关键的是数据,一旦数据库权限泄露,那么通过下述语句就可以轻松将数据导出到文件中然后下载拿走,因而mysql对此作了限制,只能将文件导出到指定目录:在配置文件中[mysqld]下配置目录,如:secure_file_priv='C:\\' #只能将数据导出到C:\\下

1、表的导出

mysql> select * from school.student1
into  outfile 'student1.txt'
fields terminated by  ','     #定义字段分隔符
optionally enclosed by '”'    #定义字符串使用什么符号括起来
lines terminated by '\n' ;    #定义换行符

2、表的导入

mysql> load data infile 'student1.txt'
INTO TABLE school.student1
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '”'
LINES TERMINATED BY '\n';

ps:数据库的迁移

务必保证在相同版本之间迁移
# mysqldump -h 源IP -uroot -p123 --databases db1 | mysql -h 目标IP -uroot -p456

二、pymysql模块

下例中均使用右图所示的登录数据

1、建立连接及sql语句执行

import pymysql
name=input('>>>').strip()
pswd=input('>>>').strip()
'''建立连接conn'''
conn=pymysql.connect(host='localhost',user='root',password='',database='egon',charset='utf8'
)
'''获取游标cur'''
cur=conn.cursor()
sql='select * from userinfo where name="%s" and password="%s";' %(name,pswd)  #占位符必须用双引号
res=cur.execute(sql)                                                          #执行SQL语句,返回sql查询成功的记录数目
print(res)
cur.close()     #关闭游标
conn.close()    #关闭连接if res:print('登录成功')
else:print('登录失败')

2、execute()之sql注入

(1)背景介绍

  在sql语句中,如果存在--字符,则执行sql语句时会注释掉--字符后面的内容。

a .绕过登录密码情况:

  如上述输入,sql语句如下:

sql=select * from egon where name='egon1' -- afsaj and password='ajdkh';

  执行此sql语句时,--后面的内容就会被注释掉,从而绕过验证密码部分的内容。

b.绕过用户名和密码情况:

  如上述输入,sql语句如下:

sql=select * from egon where name='adsaj' or 1=1 -- ajdha and password='auddh';

  执行此sql语句时,绕过了密码的验证同时,即使用户名也错误,1=1总是成立的。

(2)解决办法

  上例展示这种我们自己通过拼接sql语句形式很不安全,通过excute()拼接可以解决此问题,实例如下:

import pymysql
name=input('name:').strip()
pswd=input('password:').strip()
'''建立连接conn'''
conn=pymysql.connect(host='localhost',user='root',password='',database='egon',charset='utf8'
)
'''获取游标cur'''
cur=conn.cursor()
sql='select * from userinfo where name=%s and password=%s;' #注意%s不需要引号,因为pymysql会自动为我们加上
res=cur.execute(sql,(name,pswd))                            #拼接的内容可以是元组也可以是列表,但必须按顺序输入
print(res)
cur.close()     #关闭游标
conn.close()    #关闭连接if res:print('登录成功')
else:print('登录失败')

3、增删改

import pymysql
conn=pymysql.connect(host='localhost', user='root',password='',database='egon',charset='utf8')
cur=conn.cursor()
sql='insert into userinfo(name,password) values("alex","123");'
res=cur.execute(sql)    #res为影响的行数,结果为1
print(res)
conn.commit()           #提交后才发现表中插入记录成功
cur.close()
conn.close()

  通过占位符,可以实现插入一条或者多条信息情况。

a.用execute()插入一条信息

import pymysql
conn=pymysql.connect(host='localhost', user='root',password='',database='egon',charset='utf8')
cur=conn.cursor()
sql='insert into userinfo(name,password) values(%s,%s);' #占位符不需要引号
res=cur.execute(sql,('yuan','123'))
print(res)                                               #res为影响的行数,结果为1
conn.commit() #提交后才显示插入的数据
cur.close()
conn.close()

b.用executemany()插入多条信息

import pymysql
conn=pymysql.connect(host='localhost', user='root',password='',database='egon',charset='utf8')
cur=conn.cursor()
sql='insert into userinfo(name,password) values(%s,%s);'
res=cur.executemany(sql,[('yuan','123'),('xxx','asah'),('yyy','asyd')])
print(res)    #res为影响的行数,结果为3
conn.commit()  #提交后才显示插入的数据
cur.close()
conn.close()

4、查fetchone、fetchmany、fetchall

import pymysql
conn=pymysql.connect(host='localhost', user='root',password='',database='egon',charset='utf8')
cur=conn.cursor()
sql='select * from userinfo'
res=cur.execute(sql)                                                   #执行sql语句,返回sql影响成功的行数rows,将结果放入一个集合,等待被查询
# cursor.scroll(3,mode='absolute') # 相对绝对位置移动
# cursor.scroll(3,mode='relative') # 相对当前位置移动
res1=cur.fetchone()                                                    #查询一条
res2=cur.fetchmany(2)                                                  #查询多条,如2条
res3=cur.fetchall()                                                    #查询所有
print(res1)                                                            #(1, 'egon1', '123')
print(res2)                                                            #((2, 'egon2', '123'), (3, 'egon3', '123'))
print(res3)                                                            #((4, 'egon4', '123'), (5, 'egon5', '123'))

conn.commit()
cur.close()
conn.close()

  上述cur=conn.cursor()游标默认查询得到结果以元组显示,通过设置可以以字典显示,如下:

import pymysql
conn=pymysql.connect(host='localhost', user='root',password='',database='egon',charset='utf8')
cur=conn.cursor(cursor=pymysql.cursors.DictCursor)#设置查询结果以字典形式显示
sql='select * from userinfo'
res=cur.execute(sql)
res1=cur.fetchone()
res2=cur.fetchmany(2)
res3=cur.fetchall()
print(res1)   #{'id': 1, 'name': 'egon1', 'password': '123'}
print(res2)   #[{'id': 2, 'name': 'egon2', 'password': '123'}, {'id': 3, 'name': 'egon3', 'password': '123'}]
print(res3)   #[{'id': 4, 'name': 'egon4', 'password': '123'}, {'id': 5, 'name': 'egon5', 'password': '123'}]
conn.commit()   #提交后才会显示插入的内容
cur.close()
conn.close()

5、获取最后一条数据的自增ID

import pymysql
conn=pymysql.connect(host='localhost',user='root',password='',database='egon')
cursor=conn.cursor()sql='insert into userinfo(name,password) values("xxx","123");'
rows=cursor.execute(sql)
print(cursor.lastrowid) #在插入语句后查看

conn.commit()cursor.close()
conn.close()

转载于:https://www.cnblogs.com/seven-007/p/7756687.html

python之路_数据备份及pymysql模块相关推荐

  1. mysql六:数据备份、pymysql模块

    阅读目录 一 MySQL数据备份 二 pymysql模块 一 MySQL数据备份 #1. 物理备份: 直接复制数据库文件,适用于大型数据库环境.但不能恢复到异构系统中如Windows. #2. 逻辑备 ...

  2. 数据备份、pymysql模块

    ----------mysql数据备份------------- #1. 物理备份: 直接复制数据库文件,适用于大型数据库环境.但不能恢复到异构系统中如Windows. #2. 逻辑备份: 备份的是建 ...

  3. 最重要的会计期间是_数据备份应该在每个会计期间完成( )后进行

    [单选题]计算机进行会计业务处理与手工会计业务处理的方法和流 [单选题]计算机制作会计报表时,公式取数只能来自于账簿.() [单选题]下列职责中.[ C ]岗位是不相容职责 [单选题]账务系统中,建账 ...

  4. python 埋点_数据埋点方案简述

    数据是机器学习的前提,前面使用Python爬虫抓取数据篇介绍了通过爬虫抓取网页的方式采集数据.对于新产品,最重要的事项是获取用户,参看前面互联网产品怎么发掘种子用户和意见领袖 这篇. 在产品上线之后, ...

  5. python之路_面向对象

    1 >>> dict #类型dict就是类dict 2 <class 'dict'> 3 >>> d=dict(name='egon') #实例化 4 ...

  6. arcgis工具python源码_面向Arcgis的python脚本编程_数据

    [实例简介] <面向ArcGIS的Python脚本编程>是一本指导ArcGIS for Desktop专业用户进行Python开发的指南.该书将教会您如何通过编写Python代码处理空间数 ...

  7. python 欠采样_数据科学家需要了解的 5 种采样方法

    雷锋网 AI 科技评论按,采样问题是数据科学中的常见问题,对此,WalmartLabs 的数据科学家 Rahul Agarwal 分享了数据科学家需要了解的 5 种采样方法,雷锋网 AI 科技评论编译 ...

  8. 数据科学导论python语言实现_数据科学导论:Python语言实现(原书第2版)

    数据科学导论:Python语言实现(原书第2版) 作者:(意)阿尔贝托·博斯凯蒂(Alberto Boschetti);(意)卢卡·马萨罗(Luca Massaron) 著 出版日期:2018年01月 ...

  9. python海量数据分析师_数据分析师真的月入过万吗?(基于Python的招聘数据分析全流程实操)...

    0 前言 作为一名数据分析小白,经过一轮融汇贯穿学习后,也迫不及待想做一份数据分析报告,于是选取了现阶段最感兴趣的数据分析相关岗位招聘信息进行一波数据分析. 1 理解问题确定分析的目的和方向 因为目前 ...

  10. python产品经理_数据产品经理该懂的python技术

    本文作者详细介绍了python技术,一起来学习一下~ 一.Python介绍 小奈:其实你们写的代码好像有不同派系的? 大仁:你是说编程语言?我来介绍下吧,我们来看下GitHub(程序员同城交友.代码协 ...

最新文章

  1. 近年ERP软件公司腾飞的缘由
  2. redis, memcached, mongo性能比较
  3. 分布式协议基础http协议
  4. $Django 中间件 csrf
  5. wave格式分析,wave音频文件格式分析配程序
  6. MongoDB学习笔记(一) MongoDB介绍及安装
  7. 高数复习9.13 函数与极限
  8. Java基础——数组应用之StringBuilder类和StringBuffer类
  9. 十面阿里Java程序员终拿下阿里P6offer
  10. ExcelPackage 读取、导出excel
  11. apache storm 1.0.0 新特性
  12. [转]企业网站首页设计常见的6种布局方式
  13. GDI+_VB6_ARGB
  14. 创建3层的服务模板 (2)--- App-V package 和 Application Profile
  15. 三节点潮流计算matlab,电力系统分析大作业matlab三机九节点潮流计算报告.doc
  16. ESP8266 WIFI 模块和手机通信
  17. 关于 idea 快捷键 alt + f7 无法使用的一些尝试
  18. 2019DTCC大会感受
  19. 普通键盘Windows上虚拟Cherry机械键盘效果的方法
  20. 1.9无穷小新生五十年

热门文章

  1. python 加速方法_加速Python的几种方法
  2. 36. Valid Sudoku/37. Sudoku Solver - 数独问题-- backtracking 经典
  3. 开发环境各个版本的下载
  4. EventBus (一) 使用详解——初步使用EventBus
  5. java 去掉html/style/css等标签
  6. MyEclipse2014不支持jre1.8吗
  7. ANDROID定义自己的看法——onMeasure,MeasureSpec源代码 过程 思考具体解释
  8. python第三方模块
  9. TuxOnIce! 休眠到硬盘[zt]
  10. 用C++实现跨平台游戏开发之Irrlicht引擎