Python操作MySQL基础

除了使用图形化工具以外,我们也可以使用编程语言来执行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()

运行效果

相关推荐
呆呆小雅3 小时前
C# 可空类型
数据库·oracle·c#
jay丿3 小时前
正则表达式
服务器·mysql·算法·正则表达式·php
Duck Bro4 小时前
MySQL:常用数据类型
java·数据库·c++·mysql·java-ee
淘淘 小窝4 小时前
springboot配置多数据源mysql+TDengine保姆级教程
spring boot·mysql·tdengine
z千鑫4 小时前
【C/C++】数据库链接入门教程:从零开始的详细指南!MySQL集成与操作
c语言·数据库·c++
double丶flower4 小时前
设置Mysql5.6允许外网访问
java·mysql
开敲4 小时前
【MySQL】MySQL数据库基础
数据库·mysql
jlting1955 小时前
读取mysql、kafka数据筛选后放入mysql
大数据·sql·mysql·flink·kafka·database
痞老板A小安装C45 小时前
Redis 过期策略和内存淘汰策略
数据库·redis·缓存
十二点的泡面6 小时前
spark 写入mysql 中文数据 显示?? 或者 乱码
大数据·mysql·spark