除了使用图形化工具以外,我们也可以使用编程语言来执行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 # 订单id
self.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_list
class JsonFileReader(FileReader): # 用来读取JSON文件数据的方法
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()一次性读取文件的每一行内容返回的是列表
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_list
if __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_data
conn = 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()
运行效果