• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
菩提叶子
博客园    首页    新随笔    联系   管理    订阅  订阅
python操作mysql数据库

一、python连接MySQL

# ### 1.基本语法
# (1) 创建连接  host  user  password  database 这四个参数必须写
conn = pymysql.connect(host="127.0.0.1",user="root",password="123456",database="db1")
# (2) 创建游标对象(该对象可以操作数据库增删改查)
cursor = conn.cursor()
# (3) 执行sql语句,可写增删改查sql语句
sql = "select * from 表名"
# 返回的是数据的总条数
res = cursor.execute(sql)
# (4)获取数据 fetchone 获取一条
res = cursor.fetchone()
# (5) 释放游标对象
cursor.close()
# (6) 关闭连接
conn.close()

二、事务处理

#pymysql 操作事务处理时,需要commit提交数据,才会变化,
#否则rollback回滚.恢复到最初状态

三、sql注入

1、sql注入发生的现象

#sql注入的现象
import pymysql
user = input("请输入用户名: >>> ").strip()
pwd = input("请输入密码: >>> ").strip()

conn = pymysql.connect(host="127.0.0.1",user="root",password="123456",database="db0826")
cursor = conn.cursor()

sql = "select * from usr_pwd where username='%s' and password='%s' " % (user,pwd)
print(sql)
res = cursor.execute(sql)
print(res) # 查询的条数

if res:
    print("登录成功")
else:
    print("登陆失败")


cursor.close()
conn.close()

输入时 : sfsdf' or 3=3 -- sdfsd
# -- 后面的字符串都会被注释掉, 前面账号虽然是错的 但是 2=2是真的 绕开了账号和密码的判断;
select * from usr_pwd where username='afasdfasdfasdf' or 2=2 -- sfasdf' and password='3434

2、解决

使用预处理机制,可以避免绝大多数sql注入的问题
execute 如果参数为2个,将默认开启预处理
execute(sql , (参数1,参数2,参数3 .... ) )

import pymysql
user = input("请输入用户名: >>> ").strip()
pwd = input("请输入密码: >>> ").strip()


conn = pymysql.connect(host="127.0.0.1",user="root",password="123456",database="db0826")
cursor = conn.cursor()
sql = "select * from usr_pwd where username=%s and password=%s"
res = cursor.execute(sql, (user,pwd) )


print("登陆成功" if res  else "登录失败")

cursor.close()
conn.close()

四、导入导出

1、导出

#第一步: 先退出数据库
#第二步: 切换到对应的路径
mysqldump -uroot -p 库名> 库名.sql
#第三步:
# 导出所有内容
mysqldump -uroot -p 库名> 库名.sql
# 导出单个表
mysqldump -uroot -p 库名> 库名.sql

2、导入

#第一步 : 先创建一个空的数据库
#第二步 : 找到sql对应文件目录
#第三部步: 
source 路径/文件
use 数据库
source 文件路径+文件名

五、恢复文件

 innodb 在只有frm和ibd文件的情况下,如何恢复数据;

1、安装MySQL Utilities

https://downloads.mysql.com/archives/utilities/ 

2、cmd中找到frm那个文件,执行如下命令:

切换到对应目录,执行下面语句,不要加分号
mysqlfrm --diagnostic ./文件目录/t1.frm
查出建表语句,复制查询出来的建表语句在mysql中创建的新数据中使用

3、#对已创建的表进行表空间卸载 删除ibd文件

mysql> alter table t1 discard tablespace;

4、对已创建的表进行空间装载

mysql> alter table t1 import tablespace;

 

posted on 2022-11-04 19:46  菩提叶子  阅读(210)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3