数据备份及pymysql使用

数据备份

# 数据备份语法:(不能在数据库中执行,需在命令行执行)
# mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql

#示例:
#单库备份
# 备份 db1 库下所有数据,恢复时需要手动建库在库中恢复
mysqldump -uroot -p123 db1 > D:\data\test.sql
# 备份 db1 库下指定表,恢复时需要手动建库在库中恢复
mysqldump -uroot -p123 db1 table1 table2 > D:\data\test.sql
# 带库备份,可直接进行恢复,无需创建库
mysqldump -uroot -p123 --databases new_db > D:\data\db.sql

# 多库备份
mysqldump -uroot -p123 --databases db1 db2 mysql db3 > D:\data\db1_db2_mysql_db3.sql

#备份所有库
mysqldump -uroot -p123 --all-databases > all.sql
# 数据恢复语法:(进数据库执行,非命令行)
mysql > source 备份的数据.sql;
# 示例: mysql
> source D:\data\db1_db2_mysql_db3.sql;
begin;  # 开启事务
select * from emp where id = 1 for update;  # 查询id值,for update添加行锁;
update emp set salary=10000 where id = 1; # 完成更新
commit; # 提交事务
事务

 

python操作数据库

# 先安装三方模块 pymysql
import pymysql

conn = pymysql.connect(host='主机',user='用户名',password='密码',database='要使用的库')
cur = conn.cursor()   # 数据库操作符 游标
cur.execute('sql语句')

ret = cur.fetchone()          # 返回一条结果,适用于查询
# ret = cur.fetchmany(5)  # 返回五条结果
# ret = cur.fetchall()         # 返回所有结果
print(ret)   # 查看返回的结果

conn.commit() # 提交语句(插入,更新,删除需要使用提交,查询不需要)
conn.close()  # 关闭连接

 

import pymysql

conn = pymysql.connect(host = '127.0.0.1',user = 'root',
                       password = '123',database='day41')
cur = conn.cursor()
username = input('user >>>')
password = input('passwd >>>')
sql = "select * from userinfo where name = '%s' and password = '%s'"%(username,password)
cur.execute(sql)
print(cur.fetchone())
cur.close()
conn.close()
登录示例

 

还有防止 sql 注入

通过操作输入来修改后台SQL语句

#正常构造语句的情况
sql="select user,pass from tb7 where user='%s' and pass='%s'" % (user,passwd)
row_count=cursor.execute(sql)
#拼接语句被构造成下面这样,永真条件,此时就注入成功了。
select user,pass from tb7 where user='u1' or '1'-- ' and pass='u1pass'

 

要避免这种情况可以使用 pymysql 提供的参数化查询

#避免注入,使用pymysql提供的参数化语句
user="u1' or '1'-- "
passwd="u1pass"
#执行参数化查询
row_count=cursor.execute("select user,pass from tb7 where user=%s and pass=%s",(user,passwd))

# 内部执行参数化生成的SQL语句,对特殊字符进行了加\转义,避免注入语句生成。
sql=cursor.mogrify("select user,pass from tb7 where user=%s and pass=%s",(user,passwd))
print(sql)
# 被转义的语句
select user,pass from tb7 where user='u1\' or \'1\'-- ' and pass='u1pass'

 

 

username = input('user >>>')
# 在这里输如以下即可进行sql注入
# 用户名' ;--
# 任意输入' or 1=1 ;--

sql = "select * from userinfo where name = '%s' and password = '%s'"%(username,password)
# print(sql)

# sql注入原因
# -- 注释掉--之后的sql语句

# select * from userinfo where name = 'alex' ;-- and password = '792164987034';
# select * from userinfo where name = '219879' or 1=1 ;-- and password = '792164987034';
sql注入

 

import pymysql

conn = pymysql.connect(host = '127.0.0.1',user = 'root',
                       password = '123',database='day41')
cur = conn.cursor()
username = input('user >>>')
password = input('passwd >>>')
sql = "select * from userinfo where name = %s and password = %s"
cur.execute(sql,(username,password))
print(cur.fetchone())
cur.close()
conn.close()
登录示例无sql注入

 

posted @ 2019-12-03 12:29  无夜。  阅读(244)  评论(0编辑  收藏  举报