Python 数据库操作教程

Python 数据库操作教程

引言

在现代应用程序中,数据库是存储和管理数据的核心组件。Python 提供了多种方式与数据库进行交互,包括使用内置的 sqlite3 模块、SQLAlchemy ORM、以及其他第三方库如 PyMySQLpsycopg2。本教程将深入探讨如何使用 Python 进行数据库操作,涵盖从基础到高级的内容,并通过示例帮助您更好地理解。

1. 环境准备

在开始之前,确保您的计算机上安装了 Python。您可以通过以下命令检查 Python 是否已安装:

python --version

接下来,安装所需的库。我们将使用 sqlite3SQLAlchemy 作为示例。

pip install sqlalchemy

2. 使用 SQLite3 进行基本数据库操作

2.1 创建数据库和表

SQLite 是一个轻量级的数据库,非常适合小型应用和开发测试。以下代码展示了如何创建一个数据库和表。

import sqlite3# 连接到数据库(如果数据库不存在,会自动创建)
conn = sqlite3.connect('example.db')# 创建一个游标对象
cursor = conn.cursor()# 创建一个用户表
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL,age INTEGER NOT NULL
)
''')# 提交事务并关闭连接
conn.commit()
conn.close()

2.2 插入数据

接下来,我们将插入一些数据到 users 表中。

def insert_user(name, age):conn = sqlite3.connect('example.db')cursor = conn.cursor()cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', (name, age))conn.commit()conn.close()# 插入示例用户
insert_user('Alice', 30)
insert_user('Bob', 25)

2.3 查询数据

我们可以使用 SQL 查询语句从数据库中获取数据。

def fetch_users():conn = sqlite3.connect('example.db')cursor = conn.cursor()cursor.execute('SELECT * FROM users')users = cursor.fetchall()conn.close()return users# 打印所有用户
for user in fetch_users():print(user)

2.4 更新和删除数据

更新和删除数据同样简单。以下是更新和删除用户的示例。

def update_user(user_id, name, age):conn = sqlite3.connect('example.db')cursor = conn.cursor()cursor.execute('UPDATE users SET name = ?, age = ? WHERE id = ?', (name, age, user_id))conn.commit()conn.close()def delete_user(user_id):conn = sqlite3.connect('example.db')cursor = conn.cursor()cursor.execute('DELETE FROM users WHERE id = ?', (user_id,))conn.commit()conn.close()# 更新用户数据
update_user(1, 'Alice Smith', 31)# 删除用户
delete_user(2)

3. 使用 SQLAlchemy 进行高级数据库操作

SQLAlchemy 是一个强大的 ORM(对象关系映射)库,允许我们使用 Python 对象与数据库交互,而无需直接编写 SQL 语句。

3.1 设置 SQLAlchemy

首先,我们需要导入所需的库并设置数据库连接。

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker# 创建数据库引擎
engine = create_engine('sqlite:///example.db', echo=True)# 创建基础类
Base = declarative_base()# 定义用户模型
class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String)age = Column(Integer)# 创建表
Base.metadata.create_all(engine)# 创建会话
Session = sessionmaker(bind=engine)
session = Session()

3.2 使用 SQLAlchemy 插入数据

现在我们可以使用 ORM 的方式插入数据。

def insert_user_sqlalchemy(name, age):new_user = User(name=name, age=age)session.add(new_user)session.commit()# 插入示例用户
insert_user_sqlalchemy('Charlie', 28)

3.3 查询数据

使用 SQLAlchemy 查询数据也非常简单。

def fetch_users_sqlalchemy():return session.query(User).all()# 打印所有用户
for user in fetch_users_sqlalchemy():print(f'ID: {user.id}, Name: {user.name}, Age: {user.age}')

3.4 更新和删除数据

同样地,我们可以使用 SQLAlchemy 更新和删除用户。

def update_user_sqlalchemy(user_id, name, age):user = session.query(User).filter(User.id == user_id).first()if user:user.name = nameuser.age = agesession.commit()def delete_user_sqlalchemy(user_id):user = session.query(User).filter(User.id == user_id).first()if user:session.delete(user)session.commit()# 更新用户数据
update_user_sqlalchemy(1, 'Charlie Brown', 29)# 删除用户
delete_user_sqlalchemy(1)

4. 总结

在本教程中,我们介绍了如何使用 Python 与 SQLite 进行基本的数据库操作,并通过 SQLAlchemy ORM 进行更高级的交互。无论是简单的脚本还是复杂的应用程序,掌握数据库操作都是必不可少的技能。

5. 进一步学习

  • SQLAlchemy 文档:了解更多高级功能,如关系、查询构建等。
  • 数据库设计:学习如何设计高效的数据库结构。
  • 其他数据库:探索如何使用其他数据库,如 MySQL、PostgreSQL 等。

希望本教程对您有所帮助,祝您在 Python 数据库操作的学习中取得成功!


如果您有任何疑问或需要进一步的帮助,请随时在评论区留言!

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

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

相关文章

深入浅出《钉钉AI》产品体验报告

1. 引言 随着人工智能技术的迅猛发展,企业协同办公领域迎来了新的变革。钉钉作为阿里巴巴集团旗下的企业级通讯与协同办公平台,推出了钉钉AI助理,旨在提高工作效率,优化用户体验。本报告将对钉钉AI助理进行全面的产品体验分析&am…

揭开基础动销方案的神秘面纱

在如今竞争激烈的市场大环境下,产品实现有效动销可谓是企业生存发展的关键所在。而基础动销方案,正是推动产品销售的重要利器。 基础动销方案到底是什么呢?它指的是企业为促进产品销售,运用一系列营销手段和策略,提升产…

YOLO v5 Series - Image Comparison

图像相似度 Image Similarity 图片差异度 Image Dissimilaritypuzzle-diff pacman -S autoconf automake base-devel libtool pacman -S mingw-w64-x86_64-libgdautogen /opt/admin/libpuzzle>./configure configure: loading site script /etc/config.site che…

sqli—labs靶场 5-8关 (每日4关练习)持续更新!!!

Less-5 上来先进行查看是否有注入点,判断闭合方式,查询数据列数,用union联合注入查看回显位,发现到这一步的时候,和前四道题不太一样了,竟然没有回显位??? 我们看一下源…

InnoDB引擎

6.1 逻辑存储结构 InnoDB的逻辑存储结构如下图所示: 6.2 架构 6.2.1 概述 MySQL5.5 版本开始,默认使用InnoDB存储引擎,它擅长事务处理,具有崩溃恢复特性,在日常开发中使用非常广泛。下面是InnoDB架构图,左侧为内存结…

C#与C++交互开发系列(二十二):跨进程通信之使用基于HTTP协议的REST风格的API

1. 前言 REST API(Representational State Transfer Application Programming Interface)是一种基于HTTP协议的通信方式,广泛用于网络服务和分布式应用程序之间的通信。通过REST API,可以让C#和C应用程序进行跨进程、甚至跨平台的…

想让三维模型与实时视频融合?这款软件值得一试

视频融合,是指将视频数据投影到地理特征表面,并通过相应姿态参数控制投影效果的一种三维展示方式,实现了三维模型与实时视频的融合。 四维轻云是一款轻量化的地理空间数据管理云平台,支持地理空间数据的在线管理、编辑以及分享。…

汉化版WinHex和CFF Explorer下载及程序脱壳后修复,重建引入表,修改程序PE文件(附下载链接)

前言 现有一个加壳程序,要求对程序脱壳,需要修复脱壳后的程序 使用PEiD查壳,显示为NsPack 1.4 -> Liuxingping [Overlay] * 先定位程序的OEP,使用od打开程序,看到有压入栈的操作 进行查找,查找命令序列…

STM32F407简单驱动步进电机(标准库)

配置 单片机型号:STM32F104ZGT6 步进电机:YK28HB40-01A 驱动器:YKD2204M-Plus 接线方式: pu:接对应的产生PWM的引脚,这里接PF9,对应TIM14_CH1通道! pu-:接单片机的G…

linux-DNS解析

dns解析 dns:域名系统,将域名和ip地址互相映射的一个分布式的数据库,方便用户访问互联网。 ip地址:是所有设备和网站在互联网上的唯一地址,通信一定是ip和ip之间的通信。 dns解析:根据域名在互联网当中找…

光伏电站容量计算方法科普

光伏电站的容量计算是设计和评估光伏系统性能的关键步骤。通过了解光伏电站的容量,我们可以预估其发电量,优化系统设计,并确保系统能满足电力需求。本文将详细介绍几种常见的光伏电站容量计算方法,并特别介绍小程序“光伏一点通”…

采集opc da 转 profinet IO项目案例

目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 应用条件 2 4 查看OPC DA服务器的相关参数 2 5 配置网关采集opc da数据 4 6 用profinet IO协议转发数据 6 7 在服务器上运行仰科OPC DA采集软件 9 8 案例总结 11 1 案例说明 在OPC DA服务器上运行OPC DA client软件查看OPC DA服务…

循环矩阵和BCCB矩阵与向量乘积的快速计算——矩阵向量乘积与频域乘积之间的转换

目录 循环矩阵循环矩阵的定义特征值与特征向量循环矩阵的对角化 循环矩阵与向量的乘积 BCCB矩阵BCCB矩阵的定义BCCB矩阵的对角化BCCB 矩阵与向量的乘积BCCB 矩阵与向量乘积的实现 总结 循环矩阵(Circulant Matrix)和块循环对称矩阵(Block Cir…

(动画版)排序算法 -希尔排序

文章目录 1. 希尔排序(Shellsort)1.1 简介1.2 希尔排序的步骤1.3 希尔排序的C实现1.4 时间复杂度1.5 空间复杂度1.6 希尔排序动画 1. 希尔排序(Shellsort) 1.1 简介 希尔排序(Shells Sort),又…

蓝桥杯每日真题 - 第7天

题目:(爬山) 题目描述(X届 C&C B组X题) 解题思路: 前缀和构造:为了高效地计算子数组的和,我们可以先构造前缀和数组 a,其中 a[i] 表示从第 1 个元素到第 i 个元素的…

socketcan-goloang

模拟接收 模拟发送 package mainimport ("context""fmt""go.einride.tech/can""go.einride.tech/can/pkg/candevice""go.einride.tech/can/pkg/socketcan" )func main() {// linux系统设置// sudo ip link add dev can0 ty…

Java期末复习暨学校第五次上机课作业

Java期末复习暨学校第五次上机课作业:掌握类的定义、掌握类的封装、熟悉类的成员方法的调用。 第一题: 先定义两个整形变量x和y,然后showMessage方法打印防御塔的位置。 然后通过new关键字实例化了一个TowerDefense对象t1,并把x赋值为3&…

【目标检测】【Ultralytics-YOLO系列】Windows11下YOLOV5人脸目标检测

【目标检测】【Ultralytics-YOLO系列】Windows11下YOLOV5人脸目标检测 文章目录 【目标检测】【Ultralytics-YOLO系列】Windows11下YOLOV5人脸目标检测前言YOLOV5模型运行环境搭建YOLOV5模型运行数据集准备YOLOV5运行模型训练模型验证模型推理 总结 前言 Ultralytics YOLO 是一…

【启明智显分享】5G CPE与5G路由器到底有什么区别?

5G路由器和5G CPE在功能和应用场景上存在很明显的差异,小编做了详细比较,希望能帮助到你进一步了解他们的区别及应用。 一、定义与功能 5G路由器 5G路由器是一个将5G网络连接转换为Wi-Fi信号的设备,使多个Wi-Fi设备可以通过5G网络进行连接…

【go从零单排】File Paths文件路径

🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在 Go 中,处理文件路径通常使用 path/filepath 包。这个包提供了一系…