数据备份及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;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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() # 关闭连接
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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'
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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';
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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()