当前位置: 首页 > news >正文

Python 操作mysql - 关系型数据库存储

Python 操作mysql - 关系型数据库存储

文章目录

  • Python 操作mysql - 关系型数据库存储
    • 简单介绍
    • 连接数据库
    • 创建表
    • 插入数据
    • 更新数据
    • 删除数据
    • 查询数据

简单介绍

关系型数据库是一种以“关系”的方式来组织和存储数据的数据库。它使用表(也称为“关系”)来表示数据,每个表由一组具有相同性质的列和多行数据组成。关系型数据库的主要特征包括:

  1. 数据结构化:数据以表的形式结构化存储,表由行和列组成。行代表记录,列代表字段。
  2. 主键:每张表都有一个主键,用于唯一标识表中的每一条记录。主键确保数据的唯一性。
  3. 外键:外键用于建立表与表之间的关系,连接不同表的数据。
  4. 数据完整性:关系型数据库可以通过定义约束(如主键、外键、唯一性等)来保证数据的完整性和有效性。
  5. SQL(结构化查询语言):关系型数据库使用SQL作为标准接口来进行数据查询、操作、更新和管理。通过SQL,用户可以轻松地执行复杂的数据操作。

常见的关系型数据库管理系统(RDBMS)包括:

  • MySQL
  • PostgreSQL
  • Oracle Database
  • Microsoft SQL Server
  • SQLite

关系型数据库在很多应用场景中被广泛使用,特别是对于需要复杂查询和事务处理的应用。

以mysql为例子 简单使用pymysql 操作数据库

连接数据库

import  pymysqldef connect_mysql():# 执行SQL语句sql = "SELECT * FROM person"cursor.execute(sql)# 获取查询结果 fetchall()方法获取所有查询结果rows = cursor.fetchall()# 打印查询结果for row in rows:print(row)#  关闭数据库连接db.close()# 主函数
if __name__ == '__main__':# 创建数据库连接db = pymysql.connect(host='localhost', user='root', password='111111', port=3306, db='test')# 创建游标 利用游标可以执行SQL语句cursor = db.cursor()connect_mysql()

创建表

def create_table():# 创建 数据表 students# 字段名 id 含义 学号 类型 varchar(20)# 字段名 name 含义 姓名 类型 varchar(20)# 字段名 age 含义 年龄 类型 intsql = """CREATE TABLE IF NOT EXISTS students (id varchar(20) NOT NULL,name varchar(20) NOT NULL,age int NOT NULL,PRIMARY KEY (id))"""try:# 执行SQL语句cursor.execute(sql)# 提交到数据库执行db.commit()print("创建数据表 students 成功")except:# 发生错误时回滚db.rollback()print("创建数据表 students 失败")# 主函数
if __name__ == '__main__':# 创建数据库连接db = pymysql.connect(host='localhost', user='root', password='111111', port=3306, db='test')# 创建游标 利用游标可以执行SQL语句cursor = db.cursor()create_table()

插入数据

插入过程中要注意事务的四个属性:

  1. Atomicity 原子性 事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
  2. Consistency 一致性 事务必须是数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
  3. Isolation 隔离性 一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
  4. Durability 持久性 一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
 # 创建数据库连接db = pymysql.connect(host='localhost', user='root', password='111111', port=3306, db='test')# 创建游标 利用游标可以执行SQL语句cursor = db.cursor()
def insert_data():# 插入数据# 插入一条数据 (1001, '张三', 20)sql = "INSERT INTO students (id, name, age) VALUES (%s,%s,%s)"try:# 执行SQL语句cursor.execute(sql, ('1001', '张三', 20))# 提交到数据库执行db.commit()print("插入数据成功")except:# 发生错误时回滚db.rollback()print("插入数据失败")# 更加通用的插入数据方法
def insert_data_more():# 动态传入字典数据data = {'id': '1002','name':'李四','age': 21,}table_name ='students'keys = ','.join(data.keys())  # 字段名values = ','.join(['%s'] * len(data))  # 占位符sql = "INSERT INTO {table_name} ({keys}) VALUES ({values})".format(table_name=table_name, keys=keys, values=values)try:# 执行SQL语句cursor.execute(sql, tuple(data.values()))# 提交到数据库执行db.commit()print("插入数据成功")except:# 发生错误时回滚db.rollback()print("插入数据失败")

更新数据

 # 创建数据库连接db = pymysql.connect(host='localhost', user='root', password='111111', port=3306, db='test')# 创建游标 利用游标可以执行SQL语句cursor = db.cursor()def update_data():# 更新数据# 更新 id 为 1001 的学生的年龄为 22sql = "UPDATE students SET age = %s WHERE id = %s"try:# 执行SQL语句cursor.execute(sql, (22, '1001'))# 提交到数据库执行db.commit()print("更新数据成功")except:# 发生错误时回滚db.rollback()print("更新数据失败")

在实际的数据抓取过程中,大部分情况下需要插入数据,但是我们关心的是会不会出现重复数据,如果出现了,我们希望更新数据而不是重复保存一次再实现一种去重的方法,如果数据存在, 则更新数据;如果数据不存在,则插入数据。 另外,这种做法支持灵活的字典传值。

def insert_or_update_data(data):# 动态传入字典数据table_name ='students'keys = ','.join(data.keys())  # 字段名values = ','.join(['%s'] * len(data))  # 占位符sql = "INSERT INTO {table_name} ({keys}) VALUES ({values}) ON DUPLICATE KEY UPDATE {update_sql}".format(  # 这里的ON DUPLICATE KEY UPDATE 代表如果主键重复,则更新数据table_name=table_name, keys=keys, values=values, update_sql=','.join(['{key} = %s'.format(key=key) for key in data.keys()]))# sql 语句完整版本:# INSERT INTO students (id, name, age) VALUES (%s,%s,%s) ON DUPLICATE KEY UPDATE id = %s, name = %s, age = %stry:# 执行SQL语句cursor.execute(sql, tuple(data.values()) * 2)# 提交到数据库执行db.commit()print("插入或更新数据成功")except:# 发生错误时回滚db.rollback()print("插入或更新数据失败")

删除数据

def delete_data():# 删除数据# 删除 id 为 1001 的学生sql = "DELETE FROM students WHERE id = %s"try:# 执行SQL语句cursor.execute(sql, ('1001',))# 提交到数据库执行db.commit()print("删除数据成功")except:# 发生错误时回滚db.rollback()print("删除数据失败")

查询数据

def select_data():# 查询数据# 查询 age 字段大于 20 的学生的姓名和年龄sql = "SELECT name, age FROM students WHERE age > %s"try:# 执行SQL语句cursor.execute(sql, (20))# 获取查询结果 fetchall()方法获取所有查询结果rows = cursor.fetchall()# 打印查询结果for row in rows:print(row)except:# 发生错误时回滚db.rollback()print("查询数据失败")

相关文章:

Python 操作mysql - 关系型数据库存储

Python 操作mysql - 关系型数据库存储 文章目录 Python 操作mysql - 关系型数据库存储简单介绍连接数据库创建表插入数据更新数据删除数据查询数据 简单介绍 关系型数据库是一种以“关系”的方式来组织和存储数据的数据库。它使用表(也称为“关系”)来表…...

React基础知识一

写的东西太多了,照成csdn文档编辑器都开始卡顿了,所以分篇写。 1.安装React 需要安装下面三个包。 react:react核心包 react-dom:渲染需要用到的核心包 babel:将jsx语法转换成React代码的工具。(没使用jsx可以不装)1.1 在html中…...

游戏行业趋势:“AI、出海、IP”大热下,如何提升竞争力?

游戏:新品供给影响业绩释放节奏,后续游戏新品逐步上线,或驱动板块业绩修复 2024年前三季度A股游戏板块实现营业收入681.8亿元,同比增长5.1%,实现归母净利润73.3亿元,同比下滑30.4%,或主要受 20…...

shell--第一次作业

1.接收用户部署的服务名称 # 脚本入口 read -p "请输入要部署的服务名称:" service_name 2.判断服务是否安装 # 判断服务是否安装 if rpm -q "$service_name" &>/dev/null; then echo "服务 $service_name 已安装。" 已…...

Rust:原子操作 AtomicBool

在 Rust 中,你可以使用 std::sync::atomic 模块来进行原子操作。原子操作在多线程环境中特别有用,因为它们可以确保操作的原子性和可见性,从而避免数据竞争和其他并发问题。 为了读取和设置布尔值,你可以使用 AtomicBool 类型。以…...

深入浅出学算法002-n个1

任务内容 Description 由n个1组成的整数能被K&#xff08;K<10000)整除&#xff0c;n至少为多少&#xff1f; Input 多组测试数据&#xff0c;第一行输入整数T,表示组数 然后是T行&#xff0c;每行输入1个整 数代表K Output 对于每组测试数据输出1行&#xff0c;值为n Sampl…...

GPT1.0 和 GPT2.0 的联系与区别

随着自然语言处理技术的飞速发展&#xff0c;OpenAI 提出的 GPT 系列模型成为了生成式预训练模型的代表。作为 GPT 系列的两代代表&#xff0c;GPT-1 和 GPT-2 虽然在架构上有着继承关系&#xff0c;但在设计理念和性能上有显著的改进。本文将从模型架构、参数规模、训练数据和…...

STM32F103 GPIO和串口实战

本节我们将会对STM32F103的硬件资源GPIO和串口进行介绍。 一、GPIO 1.1 电路原理图 LED电路原理图如下图所示&#xff1a; 其中&#xff1a; LED1连接到PA8引脚&#xff0c;低电平点亮&#xff1b;LED2连接到PD2引脚&#xff0c;低电平点亮&#xff1b; 1.2 GPIO引脚介绍 STM32…...

Go 并发

Go 并发 Go 语言,自2009年发布以来,以其独特的并发模型和简洁的语法在编程界崭露头角。Go 语言的并发机制是其最大的亮点之一,它通过轻量级的线程——goroutine,以及通道(channel)和同步原语,为开发者提供了一种高效、易用的并发编程方式。 Goroutine:Go 语言的并发基…...

C语言数据结构与算法--简单实现栈的出栈与入栈

&#xff08;一&#xff09;栈的基本概念 栈(Stack)是限定仅在表尾进行插入和删除操作的线性表&#xff0c;如铁路调度。如下 图&#xff1a; &#xff08;二&#xff09;栈的的表现形式 栈有两种表示形式&#xff1a;栈的表示和实现、栈的 链式表示。 1&#xff0e;栈的表示和…...

单片机智能家居火灾环境安全检测-分享

目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 电路图采用Altium Designer进行设计&#xff1a; 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 传统的火灾报警系统大多依赖于简单的烟雾探测器或温度传感器&#xff0c;…...

python FastAPI 后台运行

最近需要用python把AI的能力封装起来&#xff0c;通过暴露API的方式供别的服务来调用。整体的想法是&#xff0c;选择对应接口&#xff0c;接口读取传入的sql语句&#xff0c;自动去数据库读取数据&#xff0c;运算后将结果在存放在数据库中。 搭建FastAPI框架&#xff0c;由于…...

Java开发者必备:23种设计模式全面解析

文章目录 一、创建型模式1、工厂模式简单工厂工厂方法 2、抽象工厂模式3、原型模式4、建造者模式5、单例模式 二、结构型模式1、适配器模式2、桥接模式3、组合模式4、装饰模式5、外观模式6、享元模式7、代理模式 三、行为型模式1、解释器模式2、模板方法模式3、策略模式4、观察…...

编译OpenWrt步骤

实验平台搭建 硬件平台&#xff1a;hilink-7628n核心板 宿主机系统&#xff1a;ubuntu20.04 server 宿主机安装所需工具&#xff1a; binutils bzip2 diff find flex gawk gcc-6 getopt grep install libc-dev libz-dev make4.1 perl python3.7 rsync subversion unzip whi…...

Linux:confluence8.5.9的部署(下载+安装+pojie)离线部署全流程 遇到的问题

原文地址Linux&#xff1a;confluence8.5.9的部署&#xff08;下载安装破ji&#xff09;离线部署全流程_atlassian-agent-v1.3.1.zip-CSDN博客 背景&#xff1a;个人使用2核4g 内存扛不住 总是卡住&#xff0c;但是流程通了所以 直接公司开服务器干生产 个人是centos7 公司…...

✅✅✅【Vue.js】sd.js基于jQuery Ajax最新原生完整版for凯哥API版本

api.js //封装ajax方法 import $g from "../sg";//vue项目使用 import $ from jquery;//(提示&#xff1a;原生开发页面请前往https://jquery.com下载最新版jQuery) import { Message } from "element-ui";//element项目使用 // import axios from "…...

axios 请求跨域问题

文章目录 1. 使用场景2. 解决办法 1. 使用场景 ① 编写后端测试接口&#xff0c;Vue-CLI 的默认端口为 8080&#xff0c;所以为避免端口冲突&#xff0c;我们后端的端口号换成 8081。 ② 前端通过 axios 向后端服务发起请求。 <script> import axios from axios export…...

什么是 Faiss?

好的&#xff0c;我来详细解释 Faiss&#xff0c;它的用途、使用场景&#xff0c;以及如何安装和使用。 什么是 Faiss&#xff1f; Faiss 是由 Facebook AI Research 开发的一个开源库&#xff0c;专门用于高效的相似性搜索和聚类。它非常擅长在高维向量空间中进行快速搜索&a…...

24.UE5枚举,怪物分类,龙卷风技能

2-26 枚举、怪物分类、龙旋风技能、掉落概率_哔哩哔哩_bilibili 目录 1.枚举 1.1枚举类型的创建 1.2 将枚举类型绑定到怪物蓝图上 1.3枚举类型的使用 1.3.1创建新的掉落物 1.3.2更改怪物掉落逻辑 2.龙卷风技能 2.1输入映射 2.2龙卷风发射物的创建 2.3龙卷风伤害逻辑…...

什麼是ISP提供的公共IP地址?

公共IP地址是ISP分配給設備或網路的全球唯一地址。此地址允許通過互聯網識別和訪問設備。ISP提供的公共IP地址具有幾個關鍵特徵&#xff1a; 1.每個公網IP在全球網路內都是唯一的&#xff0c;避免衝突。 2. 公共 IP 地址對其他網路可見&#xff0c;並且可用於地理定位設備。 …...

用 5 款全栈电商微系统打通你的前后端核心逻辑链路(附级联 Prompt)

各位大前端、全栈开发以及正在寻求技术进阶的同仁们&#xff0c;大家好。在日常的技术社区里&#xff0c;我们经常能看到各种流于表面的前端 UI 静态页或者几行代码拼凑的后端 CRUD 示例。但真正能在一个全栈工程师的履历中起到定海神针作用的&#xff0c;往往是那些功能内敛、…...

MindSpore Transformers 训练任务快速上手

MindSpore Transformers&#xff08;简称 MindFormers&#xff09;是昇思 MindSpore 生态下的大模型训练套件&#xff0c;集成 BERT、GPT、LLaMA、Qwen 等主流 Transformer 模型&#xff0c;提供一键式预训练 / 微调、分布式并行、混合精度、监控可视化能力&#xff0c;适配昇腾…...

OpenClaw 微信接入指南:从安装到绑定,一步到位

下载地址&#xff1a;OpenClaw Windows 一键部署包 https://xiake.yun/api/download/package/16?promoCodeIV9D9D5198DC OpenClaw 绑定微信教程 1&#xff1a;软件下载完成界面 2&#xff1a;选择右上角设置 3&#xff1a;选择聊天配置 4&#xff1a;选择右边展开&#xff…...

ElevenLabs云南话语音定制化指南(独家披露官方未公开的phoneme alignment bypass技巧)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;ElevenLabs云南话语音定制化全景概览 ElevenLabs 作为全球领先的AI语音合成平台&#xff0c;原生支持英语、西班牙语、法语等数十种主流语言&#xff0c;但尚未在官方API中直接开放云南话&#xff08;属西南…...

3个关键技术方案:如何系统化解决Navicat Premium试用期限制

3个关键技术方案&#xff1a;如何系统化解决Navicat Premium试用期限制 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 本文旨…...

安装 KubeSphere

安装 KubeSphere KubeSphere Core (ks-core) 是 KubeSphere 的核心组件&#xff0c;为扩展组件提供基础的运行环境。KubeSphere Core 安装完成后&#xff0c;即可访问 KubeSphere Web 控制台。 1. 安装 KubeSphere Core 在集群节点上&#xff0c;执行以下命令安装 KubeSpher…...

CSerialPort 4.3.2 保姆级集成指南:5分钟让你的QT/MFC/Electron项目拥有稳定串口功能

CSerialPort 4.3.2 全栈集成实战&#xff1a;从QT到Electron的跨平台串口方案 在工业控制、物联网设备调试和嵌入式系统开发中&#xff0c;串口通信作为最基础也最可靠的数据传输方式之一&#xff0c;至今仍发挥着不可替代的作用。然而&#xff0c;不同操作系统提供的串口API差…...

别再手动刷权重了!用Maya的ADV插件,30分钟搞定角色身体绑定(附减模包裹技巧)

别再手动刷权重了&#xff01;用Maya的ADV插件30分钟完成角色身体绑定 角色绑定一直是三维动画制作中的痛点环节。记得刚入行时&#xff0c;我曾为一个穿着皮夹克的游戏角色手动刷权重整整两天&#xff0c;结果肘部变形依然不自然。直到接触ADV插件的减模包裹功能&#xff0c;…...

如何用Python自动化脚本高效抢购热门演出门票?智能抢票解决方案揭秘

如何用Python自动化脚本高效抢购热门演出门票&#xff1f;智能抢票解决方案揭秘 【免费下载链接】Automatic_ticket_purchase 大麦网抢票脚本 项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase 还在为热门演唱会门票秒光而烦恼吗&#xff1…...

工业设备数据采集太难?这款.NET8边缘网关,轻松搞定多协议对接

&#x1f308;前言如今工业数字化、智能化转型脚步越来越快&#xff0c;工厂现场各类 PLC、仪表、传感器设备型号繁杂&#xff0c;通信协议五花八门&#xff0c;设备数据采集难、协议对接繁琐、多设备统一管控麻烦&#xff0c;一直是很多制造企业、工控从业者头疼的实际问题。市…...