一 前言
对于SQL章节前言->SQL_DQL_排序分页的课程,这里不做记录,因为都是讲MYSQL本身的内容,与python无关。
当然,接下来的课需要用到mysql,所以大家需要自行下载,这并不难。
二 python操作MYSQL基础使用
安装第三方库。
pip install pymysql
2.1 select查询
from pymysql import Connection
# 获取到mysql数据的链接对象
conn = Connection(
host="localhost", # 主机名
port=3306, # 端口
user="root", # 账户
password="123456" # 密码
)
# 获取游标对象
cursor = conn.cursor()
# 选择数据库
# conn.select_db("sys")
# 执行sql
# cursor.execute("create tabel test_pymysql(id int);")
# 获取查询结果
conn.select_db("girls")
cursor.execute("select * from boys")
results = cursor.fetchall()
print(type(results))
print(results)
for r in results:
print(r)
# 关闭
conn.close()
2.2 commit提交
即在pymysql进行插入或者修改的sql语句时,需要添加xxx.commit(),否则无法插入或者修改。
from pymysql import Connection
# 获取到mysql数据的链接对象
conn = Connection(
host="localhost", # 主机名
port=3306, # 端口
user="root", # 账户
password="123456" # 密码
)
# 获取游标对象
cursor = conn.cursor()
conn.select_db("girls")
cursor.execute("insert into boys values(5,'乔峰',50)")
# 确认
conn.commit()
# 关闭
conn.close()
插入前的表数据:
插入后的表数据:
三 综合案例
需求:将数据分析案例的两个文件的内容读取出来,将其保存到数据库中。
因为文件有四列,所以我们数据库的表创建对应四个字段,如下图。
然后打开DBeaver(Nvicat也可以),输入以下内容创建数据库和表。
CREATE DATABASE py_sql charset utf8;
use py_sql;
CREATE TABLE orders(
order_date DATE,
order_id VARCHAR(255),
money INT,
provice VARCHAR(10)
)
生成打开表。
data_define.py:
class Record:
#定义4个成员变量,因为两个数据txt都是四列数据
def __init__(self,data,order_id,money,provine):
self.date = data #订单日期
self.order_id = order_id#订单ID
self.money = money#订单金额
self.provine = provine#订单省份
def __str__(self):
return (f"{self.date}, {self.order_id}, {self.money}, {self.provine}")
file_define.py:
import json
from data_define import Record
# 文件父类
class FileReader:
def read_data(self) :
pass
# 读取文本文件
class TextFileReader(FileReader):
def __init__(self,path):
self.path = path
# 从文件读取数据,并封装成Record列表返回
def read_data(self):
f = open(self.path,"r",encoding="UTF-8")
record_list = []
for line in f.readlines():
line = line.strip() # 去掉\n
data_list = line.split(",")
record = Record(data_list[0], data_list[1], int(data_list[2]), data_list[3])
record_list.append(record)
f.close()
return record_list # list[Record]
# 读取json文件
class JsonFileReader(FileReader):
def __init__(self,path):
self.path = path
# 从文件读取数据,并封装成Record列表返回
def read_data(self):
f = open(self.path, "r", encoding="UTF-8")
record_list = []
for line in f.readlines():
data_dict = json.loads(line)
record = Record(data_dict["date"], data_dict["order_id"], int(data_dict["money"]), data_dict["province"])
record_list.append(record) # list[Record]
f.close()
return record_list
if __name__ == '__main__':
text_file_reader = TextFileReader("C:/Users/Administrator/Desktop/Py/第13章资料/2011年1月销售数据.txt")
json_file_reader = JsonFileReader("C:/Users/Administrator/Desktop/Py/第13章资料/2011年2月销售数据JSON.txt")
list1 = text_file_reader.read_data()
list2 = json_file_reader.read_data()
for l in list1:
print(l)
for l in list2:
print(l)
main.py:
from file_define import FileReader, TextFileReader, JsonFileReader
from data_define import Record
from pyecharts.charts import Bar
from pyecharts.options import *
from pyecharts.globals import ThemeType
from pymysql import Connection
text_file_reader = TextFileReader("C:/Users/Administrator/Desktop/Py/第13章资料/2011年1月销售数据.txt")
json_file_reader = JsonFileReader("C:/Users/Administrator/Desktop/Py/第13章资料/2011年2月销售数据JSON.txt")
jan_data: list[Record] = text_file_reader.read_data()
feb_data: list[Record] = json_file_reader.read_data()
all_data: list[Record] = jan_data + feb_data
# 构建mysql链接对象
conn = Connection(
host="localhost", # 主机名
port=3306, # 端口
user="root", # 账户
password="123456", # 密码
autocommit=True # 手动提交
)
# 获得游标对象
cursor = conn.cursor()
# 选择数据库
conn.select_db("py_sql")
# 组织sql语句
for record in all_data:
sql = f"insert into orders(order_date, order_id, money, provice) " \
f"values('{record.date}','{record.order_id}','{record.money}','{record.provine}')"
# 智行sql语句
cursor.execute(sql)
print("插入完成")
结果:可以看到,总共有1000条数据被插入。