Python学习从0到1 day25 第二阶段 SQL ② Python操作数据库

news2025/2/26 23:59:30

少年有梦,不应至于心动,更要付诸行动

                                                     —— 24.4.11

pymysql

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

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

安装

pip install pymysql

创建到MySQL的数据库链接

from pymysql import Connection

# 获取到MySQL数据库的链接对象
conn = Connection(
    host = 'localhost', # 主机名(IP地址)
    port = 3306,    # 端口,默认3306
    user = 'root',   # 账户名
    password = 'xxxxxxx'    # 密码
)

# 打印MySQL数据库软件信息
print(conn.get_server_info())

# 关闭到数据库的链接
conn.close()

pymysql库的基本操作

非查询性质SQL

'''
演示Python pymysql库的基本操作
'''
from pymysql import Connection

# 获取到MySQL数据库的链接对象
conn = Connection(
    host = 'localhost',          # 主机名(IP地址)
    port = 3306,                 # 端口,默认3306
    user = 'root',               # 账户名
    password = '954926928lcl'    # 密码
)

# 执行非查询性质SQL
    # 获取游标对象
cursor = conn.cursor()
    # 选择数据库
conn.select_db("test")
    # 使用游标对象,执行sql语句
cursor.execute("create table pythonTest(id int);")    # 分号可省略

查询性质SQL

'''
演示Python pymysql库的基本操作
'''
from pymysql import Connection

# 获取到MySQL数据库的链接对象
conn = Connection(
    host = 'localhost',          # 主机名(IP地址)
    port = 3306,                 # 端口,默认3306
    user = 'root',               # 账户名
    password = '954926928lcl'    # 密码
)

# 执行非查询性质SQL
    # 获取游标对象
cursor = conn.cursor()
    # 选择数据库
conn.select_db("twe_8")
    # 使用游标对象,执行sql语句

# 执行查询性质SQl
    # 获取查询结果
cursor.execute("select * from dept")
    # 拿到查询结果
results = cursor.fetchall()
    # 打印出查询结果
for r in results:
    print(r)

# 打印MySQL数据库软件信息
# print(conn.get_server_info())

# 关闭到数据库的链接
conn.close()

如何获取链接对象

        ①from pymysql import Connection 导包

        ②Connection(主机,端口,账户,密码)即可得到链接对象

        ③链接对象.close() 关闭和MySQL数据库的链接

如何执行SQL查询

        通过链接对象调用cursor()方法,得到游标对象

                游标对象.execute()执行SQL语句

                游标对象.fetchall()得到全部的查询结果封装入元组内

数据插入

commit提交

经过python执行的数据插入操作是无法将数据插入到数据表中

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

        通过 链接对象.commit() 即可确认此行为,只有确认的修改,才能生效

'''
演示使用pymysql库进行数据插入的操作
'''

# 导包
from pymysql import Connection

# 构建MySQL数据库的链接
conn = Connection(
    host = 'localhost',          # 主机名(IP地址)
    port = 3306,                 # 端口,默认3306
    user = 'root',               # 账户名
    password = 'xxxxx'    # 密码
)

# 执行非查询性质SQL
cursor = conn.cursor()  # 获取到游标对象
# 选择数据库
conn.select_db("ele_29")
# 执行sql
cursor.execute("insert into dept values(45,'小明')")
# 通过commit确认
conn.commit()
# 关闭链接
conn.close()

自动commit

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

autocommit = True

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

如上代码进行设置,即可自动提交无需手动commit了

示例:

'''
演示使用pymysql库进行 数据插入 的操作
'''

# 导包
from pymysql import Connection

# 构建MySQL数据库的链接
conn = Connection(
    host = 'localhost',          # 主机名(IP地址)
    port = 3306,                 # 端口,默认3306
    user = 'root',               # 账户名
    password = '954926928lcl',   # 密码
    autocommit = True            # 设置自动提交(确认)
)

# 执行非查询性质SQL
cursor = conn.cursor()  # 获取到游标对象
# 选择数据库
conn.select_db("ele_29")
# 执行sql
cursor.execute("insert into dept values(1001,'林俊接')")
# # 通过commit确认
# conn.commit()
# 关闭链接
conn.close()

运行结果

综合案例

使用SQL语句和pymysql库完成综合案例的开发

        我们使用前文中的销售数据集,完成使用Python语言,读取数据,并将数据写入MySQL的功能

1.DDL定义

本次需求开发我们需要新建一个数据库来使用,数据库名称:py_sql

基于数据结构,我们可以得到建表语句

create table orders(
    order_date DATE,
    order_in varchar(255)
    money int,
    province varchar(10)
)

① 创建数据库

② 使用py_sql数据库

use py_sql;

③ 建表语句

create table orders(
	order_date date,	
	order_id varchar(255),
	money int,
	province varchar(10)
);

④ 数据定义的类

'''
数据定义的类

1. 设计一个类,可以完成数据的封装

'''

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}"

⑤ 文件相关的类

'''
和文件相关的类定义在这里

2. 设计一个抽象类,定义文件读取的相关功能,并使用子类实现具体功能
'''

import json

# 导包
from data_define import Record


# 定义一个抽象类用来做顶层设计,确定类中有哪些功能需要实现
class FileReader:
    # 顶层设计 pass变为抽象方法
    def read_data(self) -> list[Record]:    # 返回值是一个Record类的列表List
        # 读取文件的数据,将读到的每一条数据都转换为我们定义的Record类对象,使用list将record对象封装起来返回即可
        pass


# 文本数据的文件读取器,继承抽象类
class TextFileReader(FileReader):

    # 定义一个构造方法
    def __init__(self, path):
        self.path = path  # 定义成员变量记录文件的路径

        # 复写(实现抽象方法)父类的方法
    def read_data(self) -> list[Record]:
        # 方法内部使用成员变量用self
        f = open(self.path, "r", encoding="UTF-8")
        # 类型注解
        record_list: list[Record] = []
        for line in f.readlines():
            # 消除读取到的每一行数据中的\n
            line = line.strip()
            # 以逗号用split方法进行切割
            data_list = line.split(",")
            # 金钱数字进行转换int()
            record = Record(data_list[0], data_list[1], int(data_list[2]), data_list[3])
            record_list.append(record)

        # 关闭文件对象
        f.close()
        # 返回record对象列表
        return record_list


# JSON文件读取器2
# 同样继承于FileReader
class JsonFileReader(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():
            data_dict = json.loads(line)
            record = Record(data_dict["date"], data_dict["order_id"], int(data_dict["money"]), data_dict["province"])
            # 将record对象放入record_list中,并返回
            record_list.append(record)

            # 关闭文件对象
        f.close()
        return record_list


if __name__ == '__main__':
    text_file_reader = TextFileReader("E:\python.learning\第13章资料/2011年1月销售数据.txt")
    json_file_reader = JsonFileReader("E:\python.learning\第13章资料/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)

⑥ 综合案例main代码

# 导包
from file_define import FileReader, TextFileReader, JsonFileReader
from data_define import Record
from pymysql import  Connection

# 读取数据,将读取到的数据保存在变量中
text_file_reader = TextFileReader("E:\python.learning\第13章资料/2011年1月销售数据.txt")
json_file_reader = JsonFileReader("E:\python.learning\第13章资料/2011年2月销售数据JSON.txt")

# 一月份数据
jan_data: list[Record] = text_file_reader.read_data()   # 类型注解
# 二月份数据
feb_data: list[Record] = json_file_reader.read_data()   # 类型注解

# 将两个月份的数据合并为1个list来存储,通过加法存储
all_data: list[Record] = jan_data + feb_data            # 类型注解

# 构建MySQL链接对象
conn = Connection(
    host = "localhost",
    port = 3306,
    user = "root",
    password ="954926928lcl",
    autocommit = True
)

# 获得游标对象
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.data}', '{record.order_id}', '{record.money}', '{record.province}')"
    # 通过游标对象传递SQL语句传给游标对象 执行SQL语句
    cursor.execute(sql)

# 关闭MySQL链接对象
conn.close()

⑦ 数据库中案例显示

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

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

相关文章

微信小程序视频下载工具

推荐您使用"下载高手"微信小程序视频下载工具,它利用占领系统代理,抓取小程序的请求,并集成了下载功能,让您轻松获取所需视频资源。 首先下载我给大家准备好的压缩包 1.首先先退出微信 注意:一定要右下角退出 2.然后来…

Element-UI 下拉框单选转多选回显不清空绑定的值

需求 根据radio切换来更改下拉框是否多选 原因 单选和多选这两个 input 看上去没差别&#xff08;自身和层级都一致&#xff09;&#xff0c;vue出于提高性能&#xff0c;所以 vue 给复用了 解决方案 <template><section><el-radio-group v-model"radi…

【机器学习算法】决策树和随机森林在计算机视觉中的应用

前言 决策树和随机森林在计算机视觉中有着广泛的应用。决策树作为一种简单而强大的分类模型&#xff0c;可以用于图像分类、目标检测、特征提取等任务。它能够根据图像的特征逐层进行判断和分类&#xff0c;从而实现对图像数据的智能分析和理解。随机森林作为一种集成学习方法&…

基于Lipschitz李式指数的随机信号特征识别和故障检测matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 Lipschitz李式指数定义与性质 4.2 Lipschitz李式指数的估计 4.3 Lipschitz李式指数在信号特征识别与故障检测中的应用 5.完整程序 1.程序功能描述 基于Lipschitz李式指数的随机信号特…

docker基本的掌握

前言&#xff1a;先要了解docker是干什么的&#xff0c; 1掌握基本概念&#xff0c;如;镜像&#xff0c;容器&#xff0c;数据卷 2知道使用常用命令 简易图; 补充&#xff1a; 默认情况下&#xff0c;每次重启虚拟机我们都需要手动启动Docker和Docker中的容器。通过命令可以实…

【MATLAB】基于Wi-Fi指纹匹配的室内定位-仿真获取WiFi RSSI数据(附代码)

基于Wi-Fi指纹匹配的室内定位-仿真获取WiFi RSSI数据 WiFi指纹匹配是室内定位最为基础和常见的研究&#xff0c;但是WiFi指纹的采集可以称得上是labor-intensive和time-consuming。现在&#xff0c;给大家分享一下我们课题组之前在做WiFi指纹定位时的基于射线跟踪技术仿真WiFi…

解决 VSCode 编辑器点击【在集成终端中打开】出现新的弹框

1、问题描述 在 VSCode 的项目下&#xff0c;鼠标右键&#xff0c;点击【在集成终端中打开】&#xff0c;出现新的一个弹框。新版的 VSCode 会有这个问题&#xff0c;一般来说我们都希望终端是在 VSCode 的控制台中打开的&#xff0c;那么如何关闭这个弹框呢&#xff1f; 2、解…

Win10安装sqlplus遇到报错的解决办法

1.下载安装sqlplus.exe的错误解决过程 最近有用到sqlplus连接Oracle数据库执行自动化脚本&#xff0c;Orcle服务器版本是11.2.0.1。在Navicat工具上通过如下语句查询到的版本信息截图如图1所示&#xff1a; SELECT * FROM v$version; 图1 Oracle服务器版本信息 其中“Oracle Da…

台灯哪个牌子好,五大护眼灯品牌排行分享

​当前&#xff0c;我国青少年的近视率已超过半数&#xff0c;位居全球之首&#xff0c;且近视发生年龄呈现下降趋势。长时间用眼和过度使用电子产品是导致近视高发的主要因素。面对这一挑战&#xff0c;如何改善现状成为了一个亟待解决的问题。对于儿童而言&#xff0c;降低近…

【C++】模版

目录 一、泛型编程二、函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 模板参数的匹配原则 三、类模板3.1 类模板的定义格式3.2 类模板的实例化 四、非类型模板参数五、模板的特化5.1 概念5.2 函数模板特化5.3 类模板特化5.3.1 全特化5.3…

【火猫TV】欧冠:拉菲尼亚梅开二度,却在出售名单中

欧冠淘汰赛首回合&#xff0c;巴萨在客场3比2击败大巴黎&#xff0c;取得一个球的领先优势&#xff0c;双方将会在下周进行生死战。本场比赛巴萨虽然率先破门&#xff0c;却被大巴黎死死压制&#xff0c;如果不是大巴黎锋线效率一般&#xff0c;球队很可能会在客场输球。本场比…

代码随想录-算法训练营day04【链表02:两两交换链表中的节点、删除链表的倒数第N个节点、链表相交、环形链表II】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第二章 链表part02● day 1 任务以及具体安排&#xff1a;https://docs.qq.com/doc/DUG9UR2ZUc3BjRUdY ● day 2 任务以及具体安排&#xff1a;https://docs.qq.com/doc/DUGRwWXNOVEpyaVpG ● day 3 任务以及具体安排…

华为2024年校招实习硬件-结构工程师机试题(四套)

华为2024年校招&实习硬件-结构工程师机试题&#xff08;四套&#xff09; &#xff08;共四套&#xff09;获取&#xff08;WX: didadidadidida313&#xff0c;加我备注&#xff1a;CSDN 华为硬件结构题目&#xff0c;谢绝白嫖哈&#xff09; 结构设计工程师&#xff0c;结…

1. VirtualBox安装CentOS

安装 VirtualBox 地址:https://www.virtualbox.org/wiki/Downloads 版本: 6.1和7.0+版本都可以 安装: windows上安装需要admin权限,右键菜单选中 “Run as administrator” 安装 CentOS 6.10 地址:https://vault.centos.org/6.10/isos/x86_64/ 版本: 如果不需要GUI,选择…

竹云董事长在第十二届中国电子信息博览会开幕峰会暨全国“专精特新”电子信息行业论坛作主题演讲

2024年4月9日&#xff0c;第十二届中国电子信息博览会开幕峰会&#xff08;CITE2024&#xff09;暨全国“专精特新”电子信息行业论坛在深圳会展中心盛大举行。 本届电博会开幕峰会以“追求卓越&#xff0c;数创未来”为主题&#xff0c;特邀百位专家学者、行业精英、知名投资人…

金三银四面试题(十九):MySQL中的锁

在MySQL中&#xff0c;锁是非常重要的&#xff0c;特别是在多用户并发访问数据库的环境中&#xff0c;因此也是面试中常问的话题。 请说说数据库的锁&#xff1f; 关于MySQL 的锁机制&#xff0c;可能会问很多问题&#xff0c;不过这也得看面试官在这方面的知识储备。 MySQL …

新版HI3559AV100开发注意事项(三)

新版HI3559AV100开发注意事项&#xff08;三&#xff09; 十九、用的sdk是Hi3559V200_MobileCam_SDK_V1.0.1.5 播放AAC音频文件&#xff0c;adec->ao;adec的初始化里面包括了aaclc解码器的注册&#xff0c;可是在HI_MPI_ADEC_RegisterDecoder(&s32Handle, &stAac);…

43-技术演进(上):虚拟化技术演进之路

在Kubernetes集群中部署IAM应用&#xff0c;会涉及到一些重要的云原生技术&#xff0c;例如Docker、Kubernetes、微服务等。另外&#xff0c;云原生架构中还包含了很多其他的技术 因为这一讲涉及的技术栈很多&#xff0c;所以我会把重点放在演进过程上&#xff0c;不会详细介…

面试算法-171-翻转二叉树

题目 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 解 class Solution {public TreeNode invertTree(TreeNode root) {if (root n…

企业常用命令(touch/别名/重定向/Linux字符)7368字详谈

企业高薪思维&#xff1a; 企业&#xff08;工作/学习中&#xff09;操作前备份&#xff0c;操作后检查 最小化原则 1.安装软件最小化 2.参数选项最小化 3.登录用户权限最小化&#xff08;不用root登录&#xff09; 要想成功/学习上/工作上 永远比别人多做一点点&#xff08;别…