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

【30天玩转python】数据库操作

数据库操作

数据库是应用程序中用于存储和管理数据的核心组件。Python 提供了多种与数据库交互的方式,支持不同类型的数据库,包括关系型数据库(如 MySQL、PostgreSQL)和 NoSQL 数据库(如 MongoDB)。在这篇文章中,我们将介绍 Python 如何与常见的数据库进行操作。


1. 关系型数据库

关系型数据库(Relational Database)使用表的形式存储数据,并通过 SQL(结构化查询语言)来进行数据查询和操作。常见的关系型数据库包括 MySQL、PostgreSQL、SQLite 等。

1.1 使用 SQLite

SQLite 是一种轻量级的关系型数据库,Python 内置了对 SQLite 的支持,无需安装其他软件或驱动。

创建 SQLite 数据库并执行基本操作

import sqlite3# 连接到 SQLite 数据库,如果数据库不存在则会自动创建
conn = sqlite3.connect('example.db')# 创建一个游标对象,用于执行 SQL 语句
cursor = conn.cursor()# 创建一个表
cursor.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL,age INTEGER NOT NULL)''')# 插入数据
cursor.execute("INSERT INTO users (name, age) VALUES ('Alice', 30)")
cursor.execute("INSERT INTO users (name, age) VALUES ('Bob', 25)")# 提交事务
conn.commit()# 查询数据
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()for row in rows:print(row)# 关闭连接
conn.close()

代码说明:

  • 我们首先连接到一个名为 example.db 的 SQLite 数据库。
  • 使用 SQL 语句创建一个名为 users 的表,包含 idnameage 三列。
  • 然后,插入了两条数据并通过 SELECT 语句查询数据库中的所有数据。
  • 最后关闭数据库连接。
1.2 使用 MySQL

MySQL 是一种常用的开源关系型数据库管理系统。要使用 MySQL 进行 Python 编程,你需要安装 mysql-connector-python 库:

pip install mysql-connector-python

连接 MySQL 数据库并执行基本操作

import mysql.connector# 连接到 MySQL 数据库
conn = mysql.connector.connect(host="localhost",user="root",password="your_password",database="test_db"
)# 创建一个游标对象
cursor = conn.cursor()# 创建一个表
cursor.execute('''CREATE TABLE IF NOT EXISTS employees (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) NOT NULL,salary DECIMAL(10, 2) NOT NULL)''')# 插入数据
cursor.execute("INSERT INTO employees (name, salary) VALUES (%s, %s)", ('John Doe', 50000.00))
cursor.execute("INSERT INTO employees (name, salary) VALUES (%s, %s)", ('Jane Smith', 60000.00))# 提交事务
conn.commit()# 查询数据
cursor.execute("SELECT * FROM employees")
rows = cursor.fetchall()for row in rows:print(row)# 关闭连接
conn.close()

代码说明:

  • 使用 mysql.connector.connect 函数连接到 MySQL 数据库。
  • 使用 CREATE TABLE 创建一个名为 employees 的表。
  • 使用 INSERT INTO 插入数据,并通过 SELECT 查询表中的所有数据。
1.3 使用 PostgreSQL

PostgreSQL 是另一种强大的开源关系型数据库。要使用 PostgreSQL 进行 Python 编程,你需要安装 psycopg2 库:

pip install psycopg2

连接 PostgreSQL 数据库并执行基本操作

import psycopg2# 连接到 PostgreSQL 数据库
conn = psycopg2.connect(host="localhost",database="test_db",user="postgres",password="your_password"
)# 创建一个游标对象
cursor = conn.cursor()# 创建一个表
cursor.execute('''CREATE TABLE IF NOT EXISTS products (id SERIAL PRIMARY KEY,name VARCHAR(255) NOT NULL,price NUMERIC(10, 2) NOT NULL)''')# 插入数据
cursor.execute("INSERT INTO products (name, price) VALUES (%s, %s)", ('Laptop', 1200.00))
cursor.execute("INSERT INTO products (name, price) VALUES (%s, %s)", ('Phone', 800.00))# 提交事务
conn.commit()# 查询数据
cursor.execute("SELECT * FROM products")
rows = cursor.fetchall()for row in rows:print(row)# 关闭连接
conn.close()

代码说明:

  • 使用 psycopg2.connect 函数连接到 PostgreSQL 数据库。
  • 使用 SQL 语句创建 products 表,并插入产品数据。
  • 使用 SELECT 查询数据并输出。

2. NoSQL 数据库

NoSQL 数据库以非表格的方式存储数据,适合处理大规模数据集。常见的 NoSQL 数据库包括 MongoDB、Redis 等。

2.1 使用 MongoDB

MongoDB 是一种流行的 NoSQL 数据库,使用 BSON(类似 JSON)格式来存储数据。要使用 MongoDB 与 Python 进行交互,需要安装 pymongo 库:

pip install pymongo

连接 MongoDB 并执行基本操作

from pymongo import MongoClient# 连接到 MongoDB 数据库
client = MongoClient('localhost', 27017)# 选择数据库和集合
db = client['test_db']
collection = db['users']# 插入文档
user_data = {"name": "Alice", "age": 30}
collection.insert_one(user_data)# 查询文档
for user in collection.find():print(user)# 更新文档
collection.update_one({"name": "Alice"}, {"$set": {"age": 31}})# 删除文档
collection.delete_one({"name": "Alice"})# 关闭连接
client.close()

代码说明:

  • 使用 MongoClient 连接到 MongoDB 服务器,并选择 test_db 数据库中的 users 集合。
  • 插入一个用户文档,并使用 find 方法查询所有文档。
  • 更新用户文档中的年龄字段,并删除用户。

3. 数据库连接池

对于大规模的应用程序,使用数据库连接池能够提高性能,避免每次请求都需要重新建立数据库连接。Python 中的 SQLAlchemyDBUtils 库提供了数据库连接池的支持。

3.1 使用 SQLAlchemy 连接池

SQLAlchemy 是一个强大的 ORM 库,同时支持数据库连接池功能。

pip install sqlalchemy

创建 MySQL 连接池并执行操作

from sqlalchemy import create_engine# 创建连接池
engine = create_engine('mysql+mysqlconnector://root:password@localhost/test_db', pool_size=5, max_overflow=10)# 执行数据库操作
with engine.connect() as conn:result = conn.execute("SELECT * FROM employees")for row in result:print(row)

4. 小结

  • Python 提供了多种方式与数据库进行交互,支持关系型数据库(如 SQLite、MySQL、PostgreSQL)和 NoSQL 数据库(如 MongoDB)。
  • 使用 sqlite3 模块可以轻松操作 SQLite 数据库,适合轻量级应用。
  • 通过第三方库 mysql-connector-pythonpsycopg2,可以连接和操作 MySQL 和 PostgreSQL 数据库。
  • pymongo 库提供了与 MongoDB 的接口,适合 NoSQL 数据库操作。
  • 数据库连接池提高了大规模应用的性能,使用 SQLAlchemy 可以实现连接池的管理。

掌握这些数据库操作方法,能让你在应用开发中灵活选择合适的数据库,并高效管理和处理数据。

相关文章:

【30天玩转python】数据库操作

数据库操作 数据库是应用程序中用于存储和管理数据的核心组件。Python 提供了多种与数据库交互的方式,支持不同类型的数据库,包括关系型数据库(如 MySQL、PostgreSQL)和 NoSQL 数据库(如 MongoDB)。在这篇…...

PTT:Point Tree Transformer for Point Cloud Registration 论文解读

目录 一、导言 二、相关工作 1、基于Transformer的点云配准 2、针对点云的局部注意力 三、PTT 1、KPconv提取特征 2、Tree Transformer Encoder 3、Decoder 4、估计姿态 5、损失函数 四、实验 1、对比不同Backbone 2、运行时间对比 3、对比不同PTT方法下RR指标的…...

C++速通LeetCode中等第7题-和为K的子数组(巧用前缀和)

巧用哈希表与前缀和&#xff0c;前缀和差为k的两个序号之间的数组就是满足条件的子数组&#xff0c;用哈希表来存放每个序号的前缀和。 前缀和就是头元素到当前序号子数组元素的和 class Solution { public:int subarraySum(vector<int>& nums, int k) {unordered_…...

【读书笔记-《30天自制操作系统》-23】Day24

本篇内容依然比较简单&#xff0c;主要是优化窗口功能以及开发定时器应用程序。首先是优化窗口的切换功能&#xff0c;实现通过键盘和鼠标切换窗口&#xff0c;然后是实现通过鼠标关闭窗口。接着实现不同窗口输入状态的切换&#xff0c;最后是实现定时器的API与应用程序。 1.…...

XML:DOM4j解析XML

XML简介&#xff1a; 什么是XML&#xff1a;XML 是独立于软件和硬件的信息传输工具。 XML 的设计宗旨是传输数据&#xff0c;而不是显示数据。XML 标签没有被预定义。您需要自行定义标签。XML不会做任何事情&#xff0c;XML被设计用来结构化、存储以及传输信息。 XML可以发明…...

15.5 创建监控控制平面的service

本节重点介绍 : k8s中service的作用和类型创建k8s控制平面的service 给prometheus采集用&#xff0c; 类型clusterIp kube-schedulerkube-controller-managerkube-etcd service的作用 Kubernetes Service定义了这样一种抽象&#xff1a; Service是一种可以访问 Pod逻辑分组…...

【Docker Nexus3】maven 私库

1.部署环境 window 11 x64Docker Desktop 4.34.1 (166053) Docker Engine v27.2.0 1.1.Docker 镜像源 1.1.1.Docker Engine 配置 {"builder": {"features": {"buildkit": true},"gc": {"defaultKeepStorage": "32…...

Docker本地部署Chatbot Ollama搭建AI聊天机器人并实现远程交互

文章目录 前言1. 拉取相关的Docker镜像2. 运行Ollama 镜像3. 运行Chatbot Ollama镜像4. 本地访问5. 群晖安装Cpolar6. 配置公网地址7. 公网访问8. 固定公网地址 前言 本文主要分享如何在群晖NAS本地部署并运行一个基于大语言模型Llama 2的个人本地聊天机器人并结合内网穿透工具…...

MySQL:用户管理

添加用户 create user usernamelocalhost identified by user_password;删除用户 drop user usernamelocalhost;查看所有用户 输入格式 select user,host from mysql.user; 输出 mysql> select user,host from mysql.user; ----------------------------- | user …...

论文《Mixture of Weak Strong Experts on Graphs》笔记

【Mowst 2024 ICLR】论文提出了一种新的图神经网络架构&#xff0c;称为Mixture of weak and strong experts&#xff08;Mowst&#xff09;&#xff0c;通过将轻量级的多层感知机&#xff08;MLP&#xff09;作为弱专家和现成的GNN作为强专家相结合&#xff0c;以处理图中的节…...

【诉讼流程-健身房-违约-私教课-诉讼书提交流程-民事诉讼-自我学习-铺平通往法律的阶梯-讲解(3)】

【诉讼流程-健身房-违约-私教课-诉讼书提交流程-民事诉讼-自我学习-铺平通往法律的阶梯-讲解&#xff08;3&#xff09;】 1、前言说明2、流程说明3、现场提交&#xff08;线下&#xff09;4、网上提交1-起诉书样例2-起诉书编写&#xff08;1&#xff09;原告信息&#xff1a;&…...

数据结构(Day14)

一、学习内容 结构体 概念 引入&#xff1a;定义整数赋值为10 int a10; 定义小数赋值为3.14 float b3.14; 定义5个整数并赋值 int arr[5] {1 , 2 , 3 , 4 ,5}; 定义一个学生并赋值学号姓名成绩 定义一个雪糕并赋值名称产地单价 问题&#xff1a;没有学生、雪糕 数据类型 解决&…...

Paragon NTFS for Mac和Tuxera NTFS for Mac,那么两种工具有什么区别呢?

我们在使用Mac系统读取U盘的过程中往往会遇到一个问题&#xff0c;那就是U盘插进电脑无法显示&#xff0c;或者只能读取不能编辑。出现这种情况的原因就一般是格式错误。 很多小伙伴在解决这种问题的时候会选择使用U盘读写工具&#xff0c;那么哪一种读写工具比较好呢&#xf…...

HashTable结构体数组实现

写了个哈希表&#xff0c;底层逻辑基于结构体数组&#xff0c;核心结构:HashNode,结构外壳:HashTable_R,冲突处理以后会加的(QwQ)~ 目前代码&#xff1a; #ifndef PYIC_X #define PYIC_Xunsigned int PYIC_Hash(unsigned int Val, unsigned int Mov) {unsigned int Ht[4] { …...

Python 管理 AWS ElastiCache 告警

在 AWS 环境中,监控和管理 ElastiCache 集群的性能是至关重要的。本文将介绍如何使用 Python 和 AWS SDK (boto3) 来自动创建和删除 ElastiCache 集群的 CloudWatch 告警。我们将分两部分来讨论:创建告警和删除告警。 第一部分:创建 ElastiCache 告警 首先,让我们看看如何…...

【无人机设计与控制】四旋翼无人机俯仰姿态保持模糊PID控制(带说明报告)

摘要 为了克服常规PID控制方法在无人机俯仰姿态控制中的不足&#xff0c;本研究设计了一种基于模糊自适应PID控制的控制律。通过引入模糊控制器&#xff0c;实现了对输入输出论域的优化选择&#xff0c;同时解决了模糊规则数量与控制精度之间的矛盾。仿真结果表明&#xff0c;…...

[数据集][目标检测]不同颜色的安全帽检测数据集VOC+YOLO格式7574张5类别

重要说明&#xff1a;数据集里面有2/3是增强数据集&#xff0c;请仔细查看图片预览&#xff0c;确认符合要求在下载&#xff0c;分辨率均为640x640 数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件…...

确保 App 跟踪透明度权限:Flutter 中的实践

确保 App 跟踪透明度权限&#xff1a;Flutter 中的实践 在数字广告领域&#xff0c;用户隐私保护已成为一个重要议题。随着 iOS 14 的发布&#xff0c;Apple 引入了 App Tracking Transparency (ATT) 框架&#xff0c;要求开发者在跟踪用户行为以提供个性化广告之前必须获得用…...

李沐 过拟合和欠拟合【动手学深度学习v2】

模型容量 模型容量的影响 估计模型容量 难以在不同的种类算法之间比较,例如树模型和神经网络 给定一个模型种类,将有两个主要因素: 参数的个数参数值的选择范围 VC维...

Go Testify学习与使用

文章目录 1. **安装 Testify**2. **Testify 的主要功能**3. **Testify 使用示例**3.1 断言 (Assertions)3.2 使用 require3.3 使用 Mock3.4 测试套件 (Test Suites) 4. **Testify 的其他功能**5. **总结**常用资源 Testify 是 Go 语言中一个常用的单元测试库&#xff0c;它为标…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...