MySQL数据库的简单操作语法
# 查看数据库
show databases;
# 使用数据库
use world;
# 查看当前使用哪些库
select database ();
# 创建数据库
create database test charset utf8;
show databases;
# 删除数据库
drop database test;
#创建表
use world;
show tables;
create table student(
id int,
name varchar(10),
age int
);
# 删除表
drop table student;
# 插入表中数据
# 先创建表
create table students(
id int,
name varchar(10),
age int
);
#插入数据
insert into students (id) values(1),(2),(3);
insert into students (id,name,age)values(4,'张三',15),(5,'李四',16);
insert into students values(6,'bob',17);
# 创建数据库py_sql
create database py_sql charset utf8;
use py_sql;
create table orders(
order_date date,
order_id varchar(255),
money int,
province varchar(10)
);
创建MySQL数据库链接
# 导包
from pymysql import Connection
#获取MySQL数据库的链接对象
conn=Connection(
host='localhost', # 主机名(或ip地址)
port=3306, # 端口,默认为3306
user='root', # 账户名
password='zc2020' # 密码,自己设置的
)
#打印MySQL数据库的软件信息
print(conn.get_server_info())
#关闭数据库链接
conn.close()
执行结果如下图:可以显示MySQL的版本信息
执行非查询功能的MySQL语句
# 创建mysql数据库链接
# 导包
from pymysql import Connection
#获取MySQL数据库的链接对象
conn=Connection(
host='localhost', # 主机名(或ip地址)
port=3306, # 端口,默认为3306
user='root', # 账户名
password='zc2020' # 密码,自己设置的
)
#演示执行非查询性质的sql语句
#获取游标对象
cursor=conn.cursor()
# 选择数据库
conn.select_db('world')
#使用游标对象,执行sql语句,创建表格test_pysql
cursor.execute('create table test_pysql(id int,info varchar(222))')
#关闭数据库链接
conn.close()
运行结果如下:在MySQL软件的world数据库中创建了一个新的表格test_mysql。
执行查询语句
查询数据库world中的city表格,并利用for 循环把他打印出来
# 创建mysql数据库链接
# 导包
from pymysql import Connection
#获取MySQL数据库的链接对象
conn=Connection(
host='localhost', # 主机名(或ip地址)
port=3306, # 端口,默认为3306
user='root', # 账户名
password='zc2020' # 密码,自己设置的
)
#演示执行非查询性质的sql语句
#获取游标对象
cursor=conn.cursor()
# 选择数据库
conn.select_db('world')
#执行查询语句
cursor.execute('select * from city')
#获取查询结果
result:tuple=cursor.fetchall()
for r in result:
print(r)
#关闭数据库链接
conn.close()
运行结果如下:
执行SQL的插入语句
# 创建mysql数据库链接
# 导包
from pymysql import Connection
#获取MySQL数据库的链接对象
conn=Connection(
host='localhost', # 主机名(或ip地址)
port=3306, # 端口,默认为3306
user='root', # 账户名
password='zc2020' # 密码,自己设置的
)
#演示执行非查询性质的sql语句
#获取游标对象
cursor=conn.cursor()
# 选择数据库
conn.select_db('world')
# 执行sql的插入语句
cursor.execute("insert into students values(1001,'周杰伦',31)")
# 通过commit()来确定插入语句
conn.commit()
#关闭数据库链接
conn.close()
执行结果如下图:
在使用插入语句是需要手动确认,这里可以在获取mysql数据库的链接对象的时候修改autocomit=True的方式来实现自动确定
![# 创建mysql数据库链接
# 导包
from pymysql import Connection
#获取MySQL数据库的链接对象
conn=Connection(
host='localhost', # 主机名(或ip地址)
port=3306, # 端口,默认为3306
user='root', # 账户名
password='zc2020', # 密码,自己设置的
autocommit=True #自动确认
)
#演示执行非查询性质的sql语句
#获取游标对象
cursor=conn.cursor()
# 选择数据库
conn.select_db('world')
# 执行sql的插入语句
cursor.execute("insert into students values(1002,'凌俊杰',31)")
#关闭数据库链接
conn.close()
综合案列
导入这一份文本文件和一份JSON文件的数据到数据库中。数据如下:
文本文件
JSON文件数据
新建一个数据分析的python代码文件用于获取文本数据文件和JSON数据文件
# 实现步骤:
# 1、设计一个类可以完成数据的封装
# 数据定义的类
import json
# 定义数据记录类
class Record:
def __init__(self, date, order_id, money, province):
self.date = date # 订单日期
self.order_id = order_id # 订单id
self.money = money # 订单金额
self.province = province # 订单省份
def __str__(self):
return f"{self.date},{self.order_id},{self.money},{self.province}"
# 定义文件读取的抽象类
class FileReader:
def read_date(self) -> list[Record]:
"""
读取文件的数据,将每一条数据转换为 Record 对象并封装到列表中返回。
:return: 包含 Record 对象的列表
"""
pass
# 子类 TextFileReader 用于读取文本文件
class TextFileReader(FileReader):
def __init__(self, path):
self.path = path
def read_date(self) -> list[Record]:
record_list: list[Record] = []
with open(self.path, 'r', encoding='UTF-8') as f: # 使用 'with' 语句自动管理文件关闭
for line in f.readlines(): # 迭代文件中的每一行
line = line.strip() # 去除每一行末尾的换行符等空白字符
date_list = line.split(",") # 使用逗号分割数据,得到列表
record = Record(date_list[0], date_list[1], int(date_list[2]), date_list[3]) # 创建 Record 对象
record_list.append(record) # 将 Record 对象添加到列表
return record_list
# 子类 JsonFileReader 用于读取 JSON 文件
class JsonFileReader(FileReader):
def __init__(self, path):
self.path = path
def read_date(self) -> list[Record]:
record_list = []
with open(self.path, 'r', encoding='UTF-8') as f: # 使用 'with' 语句自动管理文件关闭
for line in f.readlines(): # 迭代文件中的每一行
date_dict = json.loads(line) # 解析 JSON 数据
record = Record(date_dict['date'], date_dict['order_id'], int(date_dict['money']), date_dict['province']) # 创建 Record 对象
record_list.append(record) # 将 Record 对象添加到列表
return record_list
再到主程序里实现数据的调用和MySQL语句的写入
# 综合案例
from 数据分析案例 import *
#取到文本文件的数据
text_file_reader=TextFileReader(r"C:\Users\ZC\Desktop\python学习课件\第13章资料\2011年1月销售数据.txt")
#取到JSON文件的数据
json_file_reader=JsonFileReader(r"C:\Users\ZC\Desktop\python学习课件\第13章资料\2011年2月销售数据JSON.txt")
#存入文本文件一月的数据
jan_date:list[Record]=text_file_reader.read_date()
#存入JSON文件二月的数据
feb_date:list[Record]=json_file_reader.read_date()
# 合并一月二月的数据
all_date:list[Record]=jan_date+feb_date
# 构建MySQL链接对象
# 导包
from pymysql import Connection
#获取MySQL数据库的链接对象
conn=Connection(
host='localhost', # 主机名(或ip地址)
port=3306, # 端口,默认为3306
user='root', # 账户名
password='zc2020', # 密码,自己设置的
autocommit=True #自动确认
)
#演示执行非查询性质的sql语句
#获取游标对象
cursor=conn.cursor()
# 选择数据库
conn.select_db('py_sql')
#组织SQL语句
for record in all_date:
sql=f"insert into orders(order_date,order_id,money,province) " \
f"values('{record.date}','{record.order_id}',{record.money},'{record.province}')"
print(sql)
# 执行sql的插入语句
cursor.execute(sql)
#关闭数据库链接
conn.close()
成果的展示:
在mysql的py_sql数据库的orders表中导入了数据。
案列二
把上面写入MySQL数据库的orders表格的数据转化成JSON数据文件写出并存储
import pymysql
import json
from datetime import date
# 自定义日期对象的JSON编码
def date_encoder(obj):
if isinstance(obj, date):
return obj.isoformat()
raise TypeError("Type not serializable")
# 连接到 MySQL 数据库
conn = pymysql.connect(
host='localhost',
port=3306,
user='root',
password='zc2020',
db='py_sql',
autocommit=True
)
try:
# 获取游标对象
cursor = conn.cursor()
# 执行 SQL 查询,选择要从数据库中检索的数据
cursor.execute("SELECT * FROM orders")
# 获取查询结果
result = cursor.fetchall()
# 将结果转换为列表,每行数据为一个字典
records = []
for row in result:
record = {
'order_date': row[0],
'order_id': row[1],
'money': row[2],
'province': row[3]
}
records.append(record)
# 将数据写入 JSON 文件,并使用自定义编码
with open('orders_data.json', 'w', encoding='utf-8') as json_file:
json.dump(records, json_file, default=date_encoder, ensure_ascii=False, indent=4)
except Exception as e:
print(f"An error occurred: {str(e)}")
finally:
# 关闭游标和数据库连接
cursor.close()
conn.close()
print("Data has been written to 'orders_data.json'.")
运行结果如下: