欢迎关注 『Python之pymysql库学习』 系列,持续更新中
欢迎关注 『Python之pymysql库学习』 系列,持续更新中
本专栏合集只有代码,具体的api参数解释,在专栏下面的各个文章中具体介绍。
本合集是为了给已经掌握知识的朋友们快速查阅示例使用的。
1.创建数据库
# @Time : 2021/12/13 20:15
# @Author : 南黎
# @FileName: 1.创建数据库.py
import pymysql
import random
#创建与数据库的连接
# 创建连接
# host 主机名字,本机一般都是localhost
# user 用户名
# password 用户密码
# charset 数据库编码
conn = pymysql.connect(host='localhost',user='root',password='root',charset='utf8mb4')
# 创建游标
cursor = conn.cursor()
# 创建数据库的sql(使用if判断是否已经存在数据库,数据库不存在时才会创建,否则会报错)
sql = "CREATE DATABASE IF NOT EXISTS new_db"#new_db是要创建的数据库名字
# 执行创建数据库的sql语句
cursor.execute(sql)
2.创建数据表
# @Time : 2021/12/14 20:01
# @Author : 南黎
# @FileName: 2.创建数据表.py
import pymysql
try:
#创建与数据库的连接
#参数分别是 指定本机 数据库用户名 数据库密码 数据库名 端口号 autocommit是是否自动提交(非常不建议,万一出问题不好回滚)
db=pymysql.connect(host='localhost',user='root',password='root',database='python',port=3306,autocommit=False)
#创建游标对象cursor
cursor=db.cursor()
#使用execute()方法执行sql,如果表存在则删除
cursor.execute('drop table if EXISTS student')
#创建表的sql
sql='''
create table student(
sno int(8) primary key auto_increment,
sname varchar(30) not null,
sex varchar(5) ,
age int(2),
score float(3,1)
)
'''
cursor.execute(sql)
except:
print('创建表失败')
finally:
#关闭数据库连接
db.close()
3.数据表插入单条数据
# @Time : 2021/12/14 20:06
# @Author : 南黎
# @FileName: 3.数据表插入单条数据.py
import pymysql
import random
#创建与数据库的连接
db = pymysql.connect(host='localhost', user='root', password='root', database='python', port=3306)
#创建游标对象cursor
cursor=db.cursor()
#插入sql语句
sql='''
insert into student(sname,sex,age,score) values(%s,%s,%s,%s)
'''
try:
#执行sql语句
cursor.execute(sql,('李四','woman',25,random.randint(60,100)))
#提交事务
db.commit()
print('插入成功')
except Exception as e:
print(e)
#如果出现异常,回滚
db.rollback()
print('插入失败')
finally:
#关闭数据库连接
db.close()
4.数据表插入多条数据
# @Time : 2021/12/14 20:08
# @Author : 南黎
# @FileName: 4.数据表插入多条数据.py
import pymysql
#创建与数据库的连接
db = pymysql.connect(host='localhost', user='root', password='root', database='python', port=3306)
#创建游标对象cursor
cursor=db.cursor()
#插入sql语句
sql='''
insert into student(sname,sex,age,score) values(%s,%s,%s,%s)
'''
add_data_list=[('王朝','man',25,94.6),('马汉','man',27,91.1)]#把数据以列表形式批量插入
try:
#执行sql语句
cursor.executemany(sql,add_data_list)
#提交事务
db.commit()
print('插入多条数据成功')
except Exception as e:
print(e)
#如果出现异常,回滚
db.rollback()
print('插入多条数据失败')
finally:
#关闭数据库连接
db.close()
5.数据表更新
# @Time : 2021/12/14 20:12
# @Author : 南黎
# @FileName: 5.数据表更新.py
import pymysql
import random
# 创建与数据库的连接
db = pymysql.connect(host='localhost', user='root', password='root', database='python', port=3306,autocommit=False)
# 创建游标对象cursor
cursor = db.cursor()
sql = 'update student set score=%s where sno=%s'
try:
# 执行sql
# 将sno=3的学生成绩修改为80-100之间的随机数
cursor.execute(sql, (random.randint(80, 100), 3))
# 提交数据
db.commit()
print('修改成功')
except:
print('修改失败')
db.rollback()
finally:
db.close()
6.数据库删除操作
# @Time : 2021/12/14 20:25
# @Author : 南黎
# @FileName: 6.数据库删除操作.py
import pymysql
#创建与数据库的连接
db = pymysql.connect(host='localhost', user='root', password='root', database='python', port=3306,autocommit=False)
#创建游标对象cursor
cursor=db.cursor()
#删除sql
#删除成绩小于90的学生
sql='delete from student where score < 90'
try:
#执行sql语句
cursor.execute(sql)
#提交事务
db.commit()
print('删除数据成功')
except:
db.rollback()
print('删除数据失败')
finally:
#关闭连接
db.close()
7.数据表查询操作
# @Time : 2021/12/14 20:09
# @Author : 南黎
# @FileName: 7.数据表查询操作.py
# 查询学生 年龄大于等于23的所有学生信息
import pymysql
#创建与数据库的连接
db = pymysql.connect(host='localhost', user='root', password='root', database='python', port=3306,autocommit=False)
#创建游标对象cursor
cursor=db.cursor()
#查询年龄大于等于23的所有学生信息
sql='select * from student where age>=23'
try:
#执行sql
cursor.execute(sql)
#获取查询结果
results=cursor.fetchall()
print(type(results))
print(results)
for row in results:
sno=row[0]
sname=row[1]
sex=row[2]
age=row[3]
score=row[4]
#输出
print('sno:',sno,'sname:',sname,'sex:',sex,'age:',age,'score:',score)
except Exception as e:
print(e)
print('查询失败')
finally:
db.close()
8.数据库导出数据为excel文件
# @Time : 2022/1/16 12:46
# @Author : 南黎
# @FileName: 8.数据库导出数据为excel文件.py
import pymysql
import openpyxl # 用户操作excel的库
conn = pymysql.connect(
host='localhost',
user='root',
password='root',
database='python',
port=3306,
autocommit=False,
charset="utf8mb4"
)
#从数据库中读取到学生的sno,sname,sex,age,score并放入数据库
try:
with conn.cursor() as cursor:#创建游标,在这里conn.cursor()==cursor
cursor.execute(
'select sno,sname,sex,age,score from student'
)
excel_workbook=openpyxl.Workbook()#创建一个excel工作簿
# excel_sheet=excel_workbook.create_sheet("学生成绩表")#在工作簿中建立一个工作学生成绩表,作为当前要写入内容的表
excel_sheet=excel_workbook.active #使用默认的sheet表,不新建表,切换当前把数据写入此表
#注意数据量比较少的时候用fetchall(),一行一行的读取,这里数据量少就直接fetchall()了
# openpyxl操作excel是,行和列的索引从1开始,所以要+1, col_id, col_name表示索引和索引内容
for col_id, col_name in enumerate(['sno','sname','sex','age','score']):#列索引,读取那些列的数据
excel_sheet.cell(1,col_id+1,col_name)#往单元格写入数据,第1列表格的表头'sno','sname','sex','age','score'写入
# 写入数据
for row_id,row_emp in enumerate(cursor.fetchall()):#获得每一行的数据
for col_id,col_value in enumerate(row_emp):#把每一行的每一列写入,加2是因为原先表头+1的基础上,再加上表头这一行,所以要+1+1=+2
excel_sheet.cell(row_id+2,col_id+1,col_value)
excel_workbook.save("读取到的学生成绩.xlsx")
except pymysql.MySQLError as err:#捕获异常
print(err)#如果出现异常,打印错误信息
finally:
conn.close()#无论如何都要关闭连接,节省资源占用
9.excel导入数据到数据库
下载数据集
链接: https://pan.baidu.com/s/1ezbvTRXB4A2nwVoEO_1PBA?pwd=xq5q
提取码: xq5q 复
# @Time : 2022/1/16 12:46
# @Author : 南黎
# @FileName: 9.excel导入数据到数据库.py
import pymysql
import openpyxl # 用户操作excel的库
# 先执行创建数据库和数据表的sql语句,确保已经有了数据库和数据表
# CREATE DATABASE mobile_game DEFAULT CHARACTER SET utf8mb4;
# USE mobile_game;
# CREATE TABLE tb_game (
# rank_id INT ( 10 ) UNSIGNED auto_increment COMMENT 'rank_id',
# app_id VARCHAR ( 25 ) NOT NULL COMMENT '应用id',
# app_NAME VARCHAR ( 25 ) NOT NULL COMMENT '应用名称',
# class VARCHAR ( 25 ) NOT NULL COMMENT '应用类别',
# Company_NAME VARCHAR ( 25 ) NOT NULL COMMENT '公司名',
# score FLOAT NOT NULL COMMENT '七麦指数',
# PRIMARY KEY ( rank_id )
# );
## 读取2021年12月移动应用增长榜前20.xlsx的数据
excel_workbook=openpyxl.load_workbook("2021年12月移动应用增长榜前20.xlsx")#创建一个excel工作簿
excel_sheet = excel_workbook.active # 使用默认的sheet表,不新建表,切换当前把数据写入此表
excel_data=[]#所有数据的列表
#从第二行第一列开始取得数据,不需要第一行表头的数据
#注意行列数在openpyxl库中是从0开始计数的,max_row是所有数据的行数20,我们要的是第2行到第21行
for row_id in range(2,excel_sheet.max_row+1):
values=[]#这一行数据的列表
for col_id in range(1,excel_sheet.max_column+1):
values.append(excel_sheet.cell(row_id,col_id).value)
print(values)
excel_data.append(values)#实现的2层的列表嵌套
# print(excel_data)#打印看看读取了什么数据
# 把数据写入数据库
conn = pymysql.connect(
host='localhost',
user='root',
password='root',
database='mobile_game',
port=3306,
autocommit=False,
charset="utf8mb4"
)
try:
with conn.cursor() as cursor:
#cursor.executemany表示批量插入数据,批处理
cursor.executemany(
'insert into tb_game'
'(rank_id,app_id ,app_NAME,class,Company_NAME,score)'
'values'
'(%s,%s,%s,%s,%s,%s)',
excel_data
)
conn.commit()
print("导入成功!")
except pymysql.MySQLError as err: # 捕获异常
print(err) # 如果出现异常,打印错误信息
print("导入失败!")
finally:
conn.close() # 无论如何都要关闭连接,节省资源占用
总结
大家喜欢的话,给个👍,点个关注!给大家分享更多有趣好玩的Python知识!
版权声明:
发现你走远了@mzh原创作品,转载必须标注原文链接
Copyright 2022 mzh
Crated:2022-1-15
欢迎关注 『Python之pymysql库学习』 系列,持续更新中
欢迎关注 『Python之pymysql库学习』 系列,持续更新中
【1.创建数据库(保姆级图文+实现代码)】
【2.创建数据表(保姆级图文+实现代码)】
【3.数据表插入单条数据(保姆级图文+实现代码)】
【4.数据表插入多条数据(保姆级图文+实现代码)】
【5.数据表更新(保姆级图文+实现代码)】
【6.数据库删除操作(保姆级图文+实现代码)】
【7.数据表查询操作(保姆级图文+实现代码)】
【8.数据库导出数据为excel文件(保姆级图文+实现代码)】
【9.excel导入数据到数据库(保姆级图文+实现代码)】
【数据库创建-数据表增删改查-数据表导出为excel-excel导入数据到数据库-专栏合集(实现代码注释详细)】
【一、分析fetchone()、fetchmany()、fetchall()(保姆级图文+实现代码)】
【二.游标cursor的相关知识(保姆级图文+实现代码)】
【三.sql语句的相关知识(保姆级图文+实现代码)】
【更多内容敬请期待】