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()

运行效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/382717.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【漏洞复现】多语言药房管理系统MPMS文件上传漏洞

Nx01 产品简介 多语言药房管理系统 (MPMS) 是用 PHP 和 MySQL 开发的, 该软件的主要目的是在药房和客户之间提供一套接口,客户是该软件的主要用户。该软件有助于为药房业务创建一个综合数据库,并根据到期、产品等各种参数提供各种报告。 Nx02 漏洞描述 …

详细了解ref和reactive.

这几天看到好多文章标题都是类似于: 不用 ref 的 xx 个理由不用 reactive 的 xx 个理由历数 ref 的 xx 宗罪 我就很不解,到底是什么原因导致有这两批人: 抵触 ref 的人抵触 reactive 的人 看了这些文章,我可以总结出他们的想法…

第8章 智能租房——列表页

学习目标 掌握搜索房源列表页展示功能的逻辑,能够实现在列表中展示符合搜索条件的房源数据 掌握最新房源列表页展示功能的逻辑,能够运用分页插件以分页形式展示最新房源数据 掌握热点房源列表页展示功能的逻辑,能够运用分页插件以分页形式展…

Linux文本三剑客(2)

文章目录 一、Linux文本三剑客之awk使用方法awk 的原理实例一:只查看test.txt文件(100行)内第20到第30行的内容(企业面试)实例二:已知test.txt文件内容为 BEGIN 和 END 模块实例一:统计/etc/pas…

【单片机】简单的自定义延时程序设计(代码演示)

前言 大家好吖,欢迎来到 YY 滴 单片机系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY…

2、6作业

TCP和UDP的区别 TCP和UDP都是通信协议 TCP提供有连接的,稳定的,无误码无失真无乱序无丢失的通信 UDP提供无连接的,尽力的,可能误码可能乱序,可能丢失的通信 TCP每发一个数据包就需要对方回应一个应答包&#xff0c…

C++重新入门-C++判断语句

目录 1.if语句 嵌套 if 语句 2.switch语句 工作原理 语法 示例 3.三元运算符 示例 注意事项 判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的&…

Rust基础拾遗--核心功能

Rust基础拾遗 前言1.所有权与移动1.1 所有权 2.引用3.特型与泛型简介3.1 使用特型3.2 特型对象3.3 泛型函数与类型参数 4.实用工具特型5.闭包 前言 通过Rust程序设计-第二版笔记的形式对Rust相关重点知识进行汇总,读者通读此系列文章就可以轻松的把该语言基础捡起来…

推荐知识付费源码,梦想贩卖机升级版

梦想贩卖机升级版,变现宝吸收了资源变现类产品的许多优势,并剔除了那些无关紧要的元素,使得本产品在运营和变现能力方面实现了质的飞跃。多领域素材资源知识变现营销裂变独立版本。 演示地址:runruncode.com/rjcx/19689.html

电商小程序03登录页面开发

目录 1 创建应用2 创建页面3 首页功能搭建4 登录页搭建5 设置叠加效果总结 小程序开发在经过需求分析和数据源设计之后,就可以进入到页面开发的阶段了。首先我们需要开发登录的功能。 登录功能要求用户输入用户名和密码,勾选同意用户协议和隐私协议&…

第77讲用户管理功能实现

用户管理功能实现 前端&#xff1a; views/user/index.vue <template><el-card><el-row :gutter"20" class"header"><el-col :span"7"><el-input placeholder"请输入用户昵称..." clearable v-model"…

JVM-类加载器 双亲委派机制

申明&#xff1a;文章内容是本人学习极客时间课程所写&#xff0c;文字和图片基本来源于课程资料&#xff0c;在某些地方会插入一点自己的理解&#xff0c;未用于商业用途&#xff0c;侵删。 什么是JVM JVM是Java Virtual Machine&#xff08;Java虚拟机&#xff09;的缩写&a…

Peter算法小课堂—背包问题

我们已经学过好久好久的动态规划了&#xff0c;动态规划_Peter Pan was right的博客-CSDN博客 那么&#xff0c;我用一张图片来概括一下背包问题。 大家有可能比较疑惑&#xff0c;优化决策怎么优化呢&#xff1f;答案是&#xff0c;滚动数组&#xff0c;一个神秘而简单的东西…

AI:125-基于深度学习的航拍图像中地物变化检测

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

uniapp vue3怎么调用uni-popup组件的this.$refs.message.open() ?

vue2代码 <!-- 提示信息弹窗 --><uni-popup ref"message" type"message"><uni-popup-message :type"msgType" :message"messageText" :duration"2000"></uni-popup-message></uni-popup>typ…

【集合系列】TreeMap 集合

TreeMap 集合 1. 概述2. 方法3. 遍历方式4. 排序方式5. 代码示例16. 代码示例27. 代码示例38. 注意事项9. 源码分析 其他集合类 父类 Map 集合类的遍历方式 TreeSet 集合 具体信息请查看 API 帮助文档 1. 概述 TreeMap 是 Java 中的一个集合类&#xff0c;它实现了 SortedMap…

ChatGPT高效提问—prompt常见用法(续篇九)

ChatGPT高效提问—prompt常见用法(续篇九) ​ 如何准确地向大型语言模型提出问题,使其更好地理解我们的意图,从而得到期望的答案呢?编写有效的prompt的技巧,精心设计的prompt,获得期望的的答案。 1.1 增加条件 ​ 在各种prompt技巧中,增加条件是最常用的。在prompt中…

人工智能之大数定理和中心极限定理

大数定律 大数定律&#xff1a;是一种描述当试验次数很大时所呈现的概率性致的定律&#xff0c;由概率统计定义“频率收敛于概率”引申而来。换而言之&#xff0c;就是n个独立分布的随机变量其观察值的均值依概率收敛于这些随机变量所属分布的理论均值&#xff0c;也就是总体均…

精读《js 模块化发展》

1 引言 如今&#xff0c;Javascript 模块化规范非常方便、自然&#xff0c;但这个新规范仅执行了 2 年&#xff0c;就在 4 年前&#xff0c;js 的模块化还停留在运行时支持&#xff0c;10 年前&#xff0c;通过后端模版定义、注释定义模块依赖。对经历过来的人来说&#xff0c;…

区间dp 笔记

区间dp一般是先枚举区间长度&#xff0c;再枚举左端点&#xff0c;再枚举分界点&#xff0c;时间复杂度为 环形石子合并 将 n 堆石子绕圆形操场排放&#xff0c;现要将石子有序地合并成一堆。 规定每次只能选相邻的两堆合并成新的一堆&#xff0c;并将新的一堆的石子数记做该…