Python MySQL

pymysql

除了使用图形化工具以外,我们也可以使用编程语言来执行SQL从而操作数据库。

在Python中,使用第三方库:pymysql 来完成对MySQL数据库的操作。

安装: pip install pymysql

 或在pycharm中搜索pymysql插件安装

创建到MySQL的数据库链接

from pymysql import Connection
# 构建到MySQL数据库的链接
conn = Connection(host="localhost",   # 主机名IPport=3306,          # 端口user="root",        # 账户password="123123"  # 账号密码)# 打印MySQL数据库软件信息
print(conn.get_server_info())# 关闭到数据库的链接
conn.close()

执行SQL语句

from pymysql import Connection
# 构建到MySQL数据库的链接
conn = Connection(host="localhost",   # 主机名IPport=3306,          # 端口user="root",        # 账户password="123123"  # 账号密码)
# 打印MySQL数据库软件信息
# print(conn.get_server_info())
# 执行非查询性质SQL
cursor = conn.cursor()      # 获取到游标对象
# 选择数据库
conn.select_db("test")
# 执行SQL
cursor.execute("insert into student  values( id,'周杰伦', 31) ")    # 执行添加数据的方法
# 通过commit 确认
# conn.commit()       # 提交# result = cursor.fetchall()      # 获取表中的数据
# print(result)
# for a in result:
#     print(a)# 关闭链接
conn.close()

commit提交

经过执行是无法将数据插入到数据表student中的。

这是为什么呢?

pymysql在执行数据插入或其它产生数据更改的SQL语句时,默认是需要提交更改的,即,需要通过代码“确认”这种更改行为。

通过链接对象.commit() 即可确认此行为。

自动commit

如果不想手动commit确认,可以在构建链接对象的时候,设置自动commit的属性。

from pymysql import Connection
# 构建到MySQL数据库的链接
conn = Connection(host="localhost",   # 主机名IPport=3306,          # 端口user="root",        # 账户password="123123",  # 账号密码autocommit=True     # 设置自动提交
)

案例:

要求:

我们使用《面向对象》章节案例中的数据集,完成使用Python语言,读取数据,并将数据写入MySQL的功能

 

 

 

 

文件读取及数据处理

file_define.py
"""
和文件相关的类定义
"""
import jsonfrom data_define import Record# 先定义一个抽象类用来做顶层设计,确定有哪些功能要实现
class FileReader:def read_data(self) -> list[Record]:"""读取文件的数据,读到的每一条数据都转为Record对象,将它们都封装到list内返回即可:return:"""passclass TextFileReader(FileReader):def __init__(self, path):self.path = path  # 定义成员变量记录文件的路径# 复写(实现抽象方法)父类的方法def read_data(self) -> list[Record]:f = open(self.path, "r", encoding="UTF-8")read_list: list[Record] = []for line in f.readlines():line = line.strip()  # 消除读取到的每一行数据中的\ndata_list = line.split(",")record = Record(data_list[0], data_list[1], int(data_list[2]), data_list[3])read_list.append(record)f.close()return read_listclass JsonFileReader(FileReader):def __init__(self, path):self.path = path  # 定义成员变量记录文件的路径# 复写(实现抽象方法)父类的方法def read_data(self) -> list[Record]:f = open(self.path, "r", encoding="UTF-8")read_list: list[Record] = []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"])read_list.append(record)f.close()return read_listif __name__ == '__main__':text_file_reader = TextFileReader("D:/2011年1月销售数据.txt")json_file_reader = JsonFileReader("D:/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)

数据定义

data_define.py
"""
数据定义的类
"""class Record:def __init__(self, date, order, money, province):self.date = date            # 订单日期self.order = order          # 订单IDself.money = money          # 订单金额self.province = province    # 订单省份def __str__(self):  # 将地址数据转换为字符串return f"{self.date}, {self.order}, {self.money}, {self.province}"

将数据存入数据库

main.py

from file_define import FileReader, JsonFileReader, TextFileReader
from data_define import Record
from pymysql import Connection
import json
text_file_reader = TextFileReader("D:/2011年1月销售数据.txt")
json_file_reader = JsonFileReader("d:/2011年2月销售数据JSON.txt")jan_data: list[Record] = text_file_reader.read_data()
feb_data: list[Record] = json_file_reader.read_data()# 将俩个月份的数据合并为一个list来存储
all_data: list[Record] = jan_data + feb_data# 构建MySQL链接对象
conn = Connection(host="localhost",   # 主机名IPport=3306,          # 端口user="root",        # 账户password="123123",  # 账号密码autocommit=True     # 提交事务(自动提交)
)
# 执行非查询性质SQL
cursor = conn.cursor()      # 获取到游标对象
# 选择数据库
conn.select_db("py_sql")
# 组织SQL语句
# 插入数据
for record in all_data:sql = f"insert into orders(order_date, order_id, money, province)"\f"values('{record.date}', '{record.order}', '{record.money}', '{record.province}')"# 执行SQL语句cursor.execute(sql)# 关闭MySQL链接对象
conn.close()

从数据库读取数据并转为json格式

main.py

from file_define import FileReader, JsonFileReader, TextFileReader
from data_define import Record
from pymysql import Connection
import json
text_file_reader = TextFileReader("D:/2011年1月销售数据.txt")
json_file_reader = JsonFileReader("d:/2011年2月销售数据JSON.txt")jan_data: list[Record] = text_file_reader.read_data()
feb_data: list[Record] = json_file_reader.read_data()# 将俩个月份的数据合并为一个list来存储
all_data: list[Record] = jan_data + feb_data# 构建MySQL链接对象
conn = Connection(host="localhost",   # 主机名IPport=3306,          # 端口user="root",        # 账户password="123123",  # 账号密码autocommit=True     # 提交事务(自动提交)
)
# 执行非查询性质SQL
cursor = conn.cursor()      # 获取到游标对象
# 选择数据库
conn.select_db("py_sql")
# 组织SQL语句
# 插入数据
# for record in all_data:
#     sql = f"insert into orders(order_date, order_id, money, province)"\
#           f"values('{record.date}', '{record.order}', '{record.money}', '{record.province}')"
#     # 执行SQL语句
#     cursor.execute(sql)# 查询数据
# 组织SQL语句
cursor.execute("select * from orders")    # 执行查询方法
result = cursor.fetchall()      # 获取表中的数据
my_list = []
my_dict = {}
for a in result:time_faml = a[0].strftime("%Y-%m-%d")my_dict = {"order_date": time_faml, "order_id": a[1], "money": a[2], "province": a[3]}my_list.append(my_dict)json_str = json.dumps(my_list, ensure_ascii=False)
print(json_str)
# 关闭MySQL链接对象
conn.close()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在CSDN学Golang云原生(Docker容器)

一,Doker 命令行操作 在Go语言中,可以通过调用Docker命令行工具来进行容器管理和操作。下面是一些基本的Docker命令行操作示例: 启动一个新容器 cmd : exec.Command("docker", "run", "-d", "nginx&qu…

C++(14):重载运算与类型转换

当运算符被用于类类型的对象时,允许我们为其指定新的含义;同时,也能自定义类类型之间的转换规则。和内置类型的转换一样,类类型转换隐式地将一种类型的对象转换成另一种我们所需类型的对象。 当运算符作用于类类型的运算对象时&a…

设计模式-策略模式

文章目录 策略模式 策略模式 策略模式是一种行为型设计模式,它允许在运行时动态改变对象的行为。在策略模式中,算法被封装在独立的策略类中,使得它们可以互换使用。下面是一个简单的例子: 假设我们有一个计算税收的系统&#xf…

2022年全国职业院校技能大赛高职组软件测试赛项赛题评分标准

任务 考查点 评分标准 评分细则 分值 任务一 环境搭建及系统部署 (5分) 环境搭建及系统部署包括搭建与配置测试环境,安装与部署应用系统等,对过程和结果进行截图,完成环境搭建及系统部署报告 1.测试环境搭建与…

小程序附件下载并预览功能

一、实现的功能: 1、word、excel、图片等实现下载并预览 2、打开文件后显示文件名称 二、代码: // 判断文件类型whatFileType(url) {let sr url.lastIndexOf("."); // 最后一次出现的位置let fileType url.substr(sr 1); // 截取url的…

超越传统测试:如何构建可靠的持续集成测试管道

超越传统测试:如何构建可靠的持续集成测试管道 引言 持续集成测试是现代软件开发中至关重要的一环,它可以帮助团队及时发现和解决代码问题,提高软件质量。然而,传统的测试方法往往存在效率低、容易出错等问题。本篇博客将介绍如…

Java接口通过token登录实现页面跳转到登录成功后的页面

首先,你需要在接口请求中将token作为参数传递给后端,后端需要对token进行验证并获取登录用户的信息。 在验证通过后,你可以将登录成功后的页面链接返回给前端,前端通过跳转到该链接来实现页面跳转。 以下是一个简单的Java代码演…

手机图片转pdf?两种方法介绍

手机图片转pdf?如今,随着生活的数字化,我们的手机中储存了大量的照片。但是,如果需要将这些照片转换成PDF格式,该怎么办呢?下面,小编就给大家介绍三种方法来实现这一目标。 第一种方法&#xff…

12页线性代数图解教程,github星标9.1k,适合小白

线性代数“困难户”注意,今天我给大家分享一个超适合小白的线性代数学习笔记,只有12页纸,一半都是图解,不用担心看不懂。 这份笔记名为《线性代数的艺术》,是日本学者Kenji Hiranabe基于Gilbert Strang教授的《每个人…

JS常用操作数组的方法整理

JavaScript提供了许多用于操作数组的方法。以下是其中一些常见的方法: 1. push() : 将一个或多个元素添加到数组的末尾,并返回新数组的长度。 2. pop() : 移除并返回数组的最后一个元素。 3. unshift() : 将一个或多个元素添加到数组的开头&#xff0…

【Pytorch学习】pytorch中的isinstance() 函数

描述 isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。 isinstance() 与 type() 区别: type() 不会认为子类是一种父类类型,不考虑继承关系。 isinstance() 会认为子类是一种父类类型,考虑继承关系。 如果要判…

Lambda表达式常见的Local variable must be final or effectively final原因及解决办法

目录 Local variable must be final or effectively final错误原因 解决办法按照要求定义为final(不符合实情,很多时候是查库获取的变量值)使用原子类存储变量,保证一致性AtomicReference常用原子类 其它 Local variable must be …

为什么要有虚拟内存?

操作系统是通过内存分段和内存分页的方式管理虚拟内存地址和物理内存地址之间的关系 内存分段 程序是由若干个逻辑分段组成的,代码分段、数据分段、栈段、堆段组成,不同的段有不同的属性,所以就用分段的形式分离开。 分段机制下的虚拟内存…

JVM理论(七)性能监控与调优

概述 性能优化的步骤 性能监控:就是通过以非强行或入侵方式收集或查看应用程序运行状态,包括如下问题 GC频繁CPU过载过高OOM内存泄漏死锁程序响应时间较长性能分析:通常在系统测试环境或者开发环境进行分析 通过查看程序日志以及GC日志,或者运用命令行工…

《零基础入门学习Python》第070讲:GUI的终极选择:Tkinter7

上节课我们介绍了Text组件的Indexs 索引和 Marks 标记,它们主要是用于定位,Marks 可以看做是特殊的 Indexs,但是它们又不是完全相同的,比如在默认情况下,你在Marks指定的位置中插入数据,Marks 的位置会自动…

yaml语法详解

#kv #对空格的严格要求十分高 #注入到我们的配置类中 #普通的keyvalue name: qinjiang#对象 student:name: qingjiangage: 3#行内写法 student1: {name: qinjiang,age: 3}#数组 pets:- cat- dog- pigpet: [cat,dog,pig]yaml可以给实体类赋值 person:name: kuangshenage: 19happ…

Android onTouchEvent方法不触发ACTION_UP的解决方法

Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN://触摸、按下setImageResource(R.mipmap.ic_music);break;case MotionEvent.ACTION_UP://抬起setImageResource(R.mipmap.ic_launcher);break;}return sup…

ERROR 1064 - You have an error in your SQL syntax;

ERROR 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near (/, 少个逗号吧,以前开始写SQL,特别是修改SQL的时候容易出现这样错误。 而且自己也知道在附近…

前端异常错误处理(包括但不限于react,vue)

错误异常发生 页面js报错请求报错页面资源加载报错promise异常iframe加载异常页面奔溃&卡顿异常 处理异常的方法 1、react 自带的errorBoundaries 2、 react 自定义Hooks 3、 vue errorHandler 4、try catch 对特定的代码进行捕获 5、window.addEventListerner …

【深度学习】日常笔记15

训练集和测试集并不来⾃同⼀个分布。这就是所谓的分布偏移。 真实⻛险是从真实分布中抽取的所有数据的总体损失的预期,然⽽,这个数据总体通常是⽆法获得的。计算真实风险公式如下: 为概率密度函数 经验⻛险是训练数据的平均损失,⽤…