首页 > 数据库 >python操作mysql数据库

python操作mysql数据库

时间:2022-11-04 19:56:58浏览次数:39  
标签:python res 数据库 mysql cursor user sql password conn

一、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;

 

标签:python,res,数据库,mysql,cursor,user,sql,password,conn
From: https://www.cnblogs.com/songyunjie/p/16858941.html

相关文章

  • 数据库设计心得-软4什么都做不队
    数据库设计心得项目名称:基于知识图谱的课程考核系统成员:高玉榕张龙飞梁海文陈依诺苟珊珊丑怡丹使用工具我们使用了powerdesigner工具来进行数据库的建模数据库:my......
  • mysql基本操作
    一、权限操作#1、查询当前用户selectuser()#2、设置密码setpassword=password('123456')#3、给具体某个ip设置账号密码,用来访问数据库(公网ip)createuser'......
  • 数据库设计心得-4班-代码怎么敲都队
    团队介绍项目名称:基于深度学习的人体生理数据监测系统指导老师:荣辉桂小组名称:代码怎么敲都队小组成员:崔光博(PM)、安冠东、海日娜、刘文韬、冯秋怡数据库设计目标1.涵......
  • [oeasy]python0010_hello_world_unix_c历史迷因
    HelloWorld!回忆上次内容我们这次设置了断点设置断点的目的是更快地调试调试的目的是去除​​bug​​别害怕​​bug​​一步步地总能找到​​bug​​这就是程序员基本......
  • [oeasy]python0010_hello_world_unix_c历史迷因
    ​ HelloWorld!回忆上次内容我们这次设置了断点设置断点的目的是更快地调试调试的目的是去除​​bug​​别害怕​​bug​​一步步地总能找到​​bug​​......
  • Python运算符 成员运算符、身份运算符,三目运算符
    目录​​前言​​​​一.成员运算符​​​​1.介绍​​​​2.成员运算符使用​​​​二.身份运算符​​​​1.介绍​​​​2.身份运算符使用​​​​三.三目运算符​​​​1......
  • 重温Python基础——变量
    哈喽兄弟们,今天我们来复习下变量。首先尝试在一个hello_world.py文件中使用变量,在文件开头添加一行代码,并对第二行代码进行修改,如下所示:message="helloworld"pr......
  • 计算机二级python备考刷题知识点总结(三)
    1、组合数据类型集合类型:一个元素集合,元素之间无序,相同元素在集合中唯一存在序列类型:典型代表是字符串类型和列表类型映射类型:典型代表是字典类型2、数据组织维度一维......
  • mysql查询时反应慢
    一、原因分析1.没有索引或者SQL没有命中索引导致索引失效2.单表数据量过多,导致查询遇到瓶颈。3.网络原因或者机器自身负载过高4.热点数据导致单点负载不均衡5、I/O吞......
  • Oracle数据库知识总结
    一、Sql语句1.1查询语句order排序(其中含有null)查询雇员的奖金并做降序排序(关于nullsfirst/nullslast)​​​selectename,commfromemporderbycommdescnulls......