除了使用图形化工具以外,我们也可以使用编程语言来执行SQL从而操作数据库。在Python中,使用第三方库: pymysql来完成对MySQL数据库的操作。
安装第三方库pymysql
使用命令行,进入cmd,输入命令pip install pymysql.
创建到MySQL的数据库连接
这里的8.0.36是MySQL的版本。
使用python执行非查询性质的SQL语句
代码块:
执行前数据库
执行后数据库
使用python执行查询性质的SQL语句
from pymysql import Connection # 导包# 构建到MySQL数据库的连接
coon = Connection(host="localhost", # 主机名(IP)port=3306, # 端口(默认端口是3306)user="root", # 账户password="123456" # 密码
)# 执行非查询性质SQL
cursor = coon.cursor() # 获取到游标对象
# 选择数据库
coon.select_db("mydb1")
# 执行SQL
cursor.execute("select * from product")
result = cursor.fetchall()
for r in result:print(r)# 关闭连接
coon.close()
运行效果
数据库里面的数据
向MySQL中插入数据
from pymysql import Connection # 导包# 构建到MySQL数据库的连接
coon = Connection(host="localhost", # 主机名(IP)port=3306, # 端口(默认端口是3306)user="root", # 账户password="123456" # 密码
)# 执行非查询性质SQL
cursor = coon.cursor() # 获取到游标对象
# 选择数据库
coon.select_db("mybase")
# 执行SQL
cursor.execute("insert into student values(8,'李华','男',99,96,95)")
# 确认提交
coon.commit()
# 关闭连接
coon.close()
运行代码前
运行代码后的效果
如果不想要每次手动通过commit语句提交数据,我们可以设置自动提交,如下:
coon = Connection(host="localhost", # 主机名(IP)port=3306, # 端口(默认端口是3306)user="root", # 账户password="123456", # 密码autocommit=True # 设置为自动提交 )
【综合案例】
我们将前面提到的销售额的数据全部导入MySQL中,数据来源在前面的博客中提到过:http://t.csdnimg.cn/96mXK
一.创建数据库,创建表
二.读取数据类的设计
读取数据的代码设计我们沿用前面的面向对象的设计的代码:http://t.csdnimg.cn/96mXK
data_define
"""数据定义的类
"""
class Record:def __init__(self,data,order_id,money,province):self.data = data # 订单日期self.order_id = order_id # 订单idself.money = money # 订单金额self.province = province # 销售省份def __str__(self):return f"{self.data},{self.order_id},{self.money},{self.province}"file_define
"""和文件相关的定义
"""
from data_define import *
import json
# 先定义一个抽象类用来做顶层设计,确定有那些需要实现的功能
class FileReader:def read_data(self) -> list[Record]:"""读取文件的数据,读到的每一条数据都转换为Order对象,将他们封装到list内返回即可:return:"""pass # 抽象方法class TextFileReader(FileReader): # 用来读取普通文件数据的方法def __init__(self,path):self.path = path # 定义成员变量记录文件路径# 复写(实现抽象方法)父类的方法def read_data(self) -> list[Record]:f = open(self.path,"r",encoding="UTF-8")record_list:list[Record] = []for line in f.readlines(): # readlines()一次性读取文件的每一行内容返回的是列表line = line.strip() # 消除读取到的每一行的换行符data_list = line.split(",")record = Record(data_list[0],data_list[1],int(data_list[2]),data_list[3]) # 构建为Order对象record_list.append(record)f.close()return record_listclass JsonFileReader(FileReader): # 用来读取JSON文件数据的方法def __init__(self,path):self.path = pathdef read_data(self) -> list[Record]:f = open(self.path,"r",encoding="UTF-8")record_list:list[Record] = []for line in f.readlines(): # readlines()一次性读取文件的每一行内容返回的是列表data_dict = json.loads(line)record = Record(data_dict['date'],data_dict['order_id'],data_dict['money'],data_dict['province'],) # 构建为Order对象record_list.append(record)f.close()return record_listif __name__ == '__main__':text_file_reader = TextFileReader("D:/网盘下载的文件/2011年1月销售数据.txt")jison_file_reader = JsonFileReader("D:/网盘下载的文件/2011年2月销售数据JSON.txt")list1 = text_file_reader.read_data()list2 = jison_file_reader.read_data()for l1 in list1:print(l1)for l2 in list2:print(l2)
三.读取数据插入到数据库MySQL
"""1.设计一个类,可以完成数据封装2.设计一个抽象类,定义文件读取的相关功能,并使用子类实现具体功能3.读取文件,生产数据对象4.进行数据需求的逻辑计算(计算每一天的销售额)5.插入到MySQL
"""
# 导包
from file_define import *
from data_define import *
from pymysql import Connection
# 创建文件对象获取文件
text_file_reader = TextFileReader("D:/网盘下载的文件/2011年1月销售数据.txt")
jison_file_reader = JsonFileReader("D:/网盘下载的文件/2011年2月销售数据JSON.txt")jen_data:list[Record] = text_file_reader.read_data() # 一月份的数据
feb_data:list[Record] = jison_file_reader.read_data() # 二月份的数据# 将两个月份的数据合并
all_data:list[Record] = jen_data+feb_dataconn = Connection(host="localhost",port=3306,user="root",passwd="123456",autocommit=True
)
# 获取游标对象
cursor=conn.cursor()
# 选择数据库
conn.select_db("py_sql")
# 组织SQL语句
for record in all_data:sql=f"insert into orders values('{record.data}','{record.order_id}',{record.money},'{record.province}')"# 执行SQL语句cursor.execute(sql)
# 关闭连接
conn.close()
运行效果