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

白骑士的Python教学高级篇 3.3 数据库编程

系列目录

上一篇:白骑士的Python教学高级篇 3.2 网络编程

SQL基础

        Structured Query Language (SQL) 是一种用于管理和操作关系型数据库的标准语言。SQL能够执行各种操作,如创建、读取、更新和删除数据库中的数据(即CRUD操作),以及管理数据库结构本身。理解SQL的基础对于进行数据库编程至关重要。关于SQL的详细教学可以跳转白骑士的SQL教学(敬请期待)。

基本概念和术语

  • 数据库:存储有组织的数据的容器。
  • 表:数据库中的一个结构化数据集合,由行和列组成。
  • 行:表中的一条记录。
  • 列:表中的一个字段。
  • 主键:表中唯一标识每一行的列或列组合。
  • 外键:用于在两张表之间建立连接的列。

常用SQL语句

        CREATE DATABASE:创建一个新的数据库,例如:

CREATE DATABASE mydatabase;

        CREATE TABLE:创建一个新的表,例如:

CREATE TABLE users (id INTEGER PRIMARY KEY,name TEXT NOT NULL,email TEXT UNIQUE);

        INSERT INTO:向表中插入数据,例如:

INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');

        SELECT:从表中查询数据,例如:

SELECT * FROM users;

        UPDATE:更新表中的数据,例如

UPDATE users SET email = 'newalice@example.com' WHERE name = 'Alice';

        DELETE:从表中删除数据,例如:

DELETE FROM users WHERE name = 'Alice';

        ALTER TABLE:修改表结构,例如:

ALTER TABLE users ADD COLUMN age INTEGER;

        DROP TABLE:删除表,例如:

DROP TABLE users;

        理解这些基本SQL语句是进行数据库编程的第一步。接下来,将学习如何使用SQLite和SQLAlchemy来进行数据库编程。

SQLite使用

        SQLite是一种轻量级的嵌入式关系数据库管理系统,它是一个在应用程序中使用的库,而不是独立的服务器进程。SQLite非常适合用作开发和测试环境下的小型数据库。

安装SQLite

        SQLite通常已经预装在Python标准库中。你可以通过以下命令检查:

import sqlite3print(sqlite3.sqlite_version)

创建数据库和表

        使用SQLite创建一个新的数据库和表非常简单。以下是一个示例代码:

import sqlite3# 创建一个连接对象
conn = sqlite3.connect('example.db')# 创建一个游标对象
cursor = conn.cursor()# 创建表
cursor.execute('''
CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL,email TEXT NOT NULL UNIQUE,age INTEGER
)
''')# 提交事务
conn.commit()# 关闭连接
conn.close()

插入数据

        向表中插入数据同样很简单,例如:

conn = sqlite3.connect('example.db')
cursor = conn.cursor()# 插入数据
cursor.execute('''
INSERT INTO users (name, email, age) VALUES ('Alice', 'alice@example.com', 30)
''')conn.commit()
conn.close()

查询数据

        查询数据并显示结果,例如:

conn = sqlite3.connect('example.db')
cursor = conn.cursor()cursor.execute('SELECT * FROM users')
rows = cursor.fetchall()for row in rows:print(row)conn.close()

更新和删除数据

        更新和删除数据的操作,例如:

conn = sqlite3.connect('example.db')
cursor = conn.cursor()# 更新数据
cursor.execute('''
UPDATE users SET age = 31 WHERE name = 'Alice'
''')# 删除数据
cursor.execute('''
DELETE FROM users WHERE name = 'Alice'
''')conn.commit()
conn.close()

        使用SQLite进行数据库编程非常直接,适合初学者理解和使用。接下来,将介绍使用SQLAlchemy进行ORM(对象关系映射)操作。

使用SQLAlchemy进行ORM操作

        SQLAlchemy是Python的一个SQL工具包和对象关系映射(ORM)库,提供了数据库的高级抽象,简化了数据库操作。

安装SQLAlchemy

        首先,通过pip安装SQLAlchemy:

pip install sqlalchemy

定义数据库和模型

        使用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, autoincrement=True)name = Column(String, nullable=False)email = Column(String, unique=True, nullable=False)age = Column(Integer)# 创建所有表
Base.metadata.create_all(engine)

创建会话

        创建会话用于与数据库交互,例如:

Session = sessionmaker(bind=engine)
session = Session()

插入数据

        使用模型类插入数据,例如:

new_user = User(name='Alice', email='alice@example.com', age=30)
session.add(new_user)
session.commit()

查询数据

        查询数据并显示结果,例如:

users = session.query(User).all()for user in users:print(user.name, user.email, user.age)

更新和删除数据

        更新和删除数据的操作,例如:

# 更新数据
user = session.query(User).filter_by(name='Alice').first()
user.age = 31
session.commit()# 删除数据
session.delete(user)
session.commit()

使用ORM的优势

  • 更高的抽象层:ORM将数据库表映射为Python类,使得开发者可以以面向对象的方式操作数据库。
  • 简化数据库操作:通过模型类和会话,ORM大大简化了数据库的CRUD操作。
  • 数据库无关性:ORM使得应用程序能够更容易地切换底层数据库,而无需修改大量代码。

总结

        通过SQLite和SQLAlchemy,可以方便地进行数据库编程,利用SQL直接操作数据库或通过ORM进行高层次的抽象操作。无论是简单的数据库操作还是复杂的数据库应用,这些工具和技术都能帮助开发者高效地完成任务。希望通过本篇内容,能更好地理解和应用数据库编程,为自己的项目增添更多的功能和灵活性。

下一篇:白骑士的Python教学高级篇 3.4 Web开发​​​​​​​

相关文章:

白骑士的Python教学高级篇 3.3 数据库编程

系列目录 上一篇:白骑士的Python教学高级篇 3.2 网络编程 SQL基础 Structured Query Language (SQL) 是一种用于管理和操作关系型数据库的标准语言。SQL能够执行各种操作,如创建、读取、更新和删除数据库中的数据(即CRUD操作)&a…...

macOS 安装redis

安装Redis在macOS上通常通过Homebrew进行,Homebrew是macOS上一个流行的包管理器。以下是安装Redis的步骤: 一 使用Homebrew安装Redis 1、安装Homebrew(如果尚未安装): 打开终端(Terminal)并执…...

【AIGC评测体系】大模型评测指标集

大模型评测指标集 (☆)SuperCLUE(1)SuperCLUE-V(中文原生多模态理解测评基准)(2)SuperCLUE-Auto(汽车大模型测评基准)(3)AIGVBench-T2…...

工厂模式之简单工厂模式

文章目录 工厂模式工厂模式分为工厂模式的角色简单工厂模式案例代码定义一个父类,三个子类定义简单工厂客户端使用输出结果 工厂模式 工厂模式属于创造型的模式,用于创建对象。 工厂模式分为 简单工厂模式:定义一个简单工厂类,根…...

2.(vue3.x+vite)调用iframe的方法(vue编码)

1、效果预览 2.编写代码 (1)主页面 <template><div><button @click="sendMessage">调用iframe,并发送信息...

实战项目——用Java实现图书管理系统

前言 首先既然是管理系统&#xff0c;那咱们就要实现以下这几个功能了--> 分析 1.首先是用户分为两种&#xff0c;一个是管理员&#xff0c;另一个是普通用户&#xff0c;既如此&#xff0c;可以定义一个用户类&#xff08;user&#xff09;&#xff0c;在定义管理员类&am…...

利用DeepFlow解决APISIX故障诊断中的方向偏差问题

概要&#xff1a;随着APISIX作为IT应用系统入口的普及&#xff0c;其故障定位能力的不足导致了在业务故障诊断中&#xff0c;APISIX常常成为首要的“嫌疑对象”。这不仅导致了“兴师动众”式的资源投入&#xff0c;还可能使诊断方向“背道而驰”&#xff0c;从而导致业务故障“…...

sqlalchemy获取数据条数

1、sqlalchemy获取数据条数 在SQLAlchemy中,你可以使用count()函数来获取数据表中的记录条数。 from sqlalchemy import create_engine, MetaData, Table# 数据库连接字符串 DATABASE_URI = dialect+driver://username:password@host:port/database# 创建引擎 engine = crea…...

SpringBoot的自动配置核心原理及拓展点

Spring Boot 的核心原理几个关键点 约定优于配置&#xff1a; Spring Boot 遵循约定优于配置的理念&#xff0c;通过预定义的约定&#xff0c;大大简化了 Spring 应用程序的配置和部署。例如&#xff0c;它自动配置了许多常见的开发任务&#xff08;如数据库连接、Web 服务器配…...

用随机森林算法进行的一次故障预测

本案例将带大家使用一份开源的S.M.A.R.T.数据集和机器学习中的随机森林算法&#xff0c;来训练一个硬盘故障预测模型&#xff0c;并测试效果。 实验目标 掌握使用机器学习方法训练模型的基本流程&#xff1b;掌握使用pandas做数据分析的基本方法&#xff1b;掌握使用scikit-l…...

24位DAC转换的FPGA设计及将其封装成自定义IP核的方法

在vivado设计中,为了方便的使用Block Desgin进行设计,可以使用vivado软件把自己编写的代码封装成IP核,封装后的IP核和原来的代码具有相同的功能。本文以实现24位DA转换(含并串转换,使用的数模转换器为CL4660)为例,介绍VIVADO封装IP核的方法及调用方法,以及DAC转换的详细…...

【大模型LLM面试合集】大语言模型基础_llm概念

1.llm概念 1.目前 主流的开源模型体系 有哪些&#xff1f; 目前主流的开源LLM&#xff08;语言模型&#xff09;模型体系包括以下几个&#xff1a; GPT&#xff08;Generative Pre-trained Transformer&#xff09;系列&#xff1a;由OpenAI发布的一系列基于Transformer架构…...

Qt时间日期处理与定时器使用总结

一、日期时间数据 1.QTime 用于存储和操作时间数据的类&#xff0c;其中包括小时(h)、分钟(m)、秒(s)、毫秒(ms)。函数定义如下&#xff1a; //注&#xff1a;秒(s)和毫秒(ms)有默认值0 QTime::QTime(int h, int m, int s 0, int ms 0) 若无须初始化时间数据&#xff0c;可…...

数据结构——Hash Map

1. Hash Map简介 Hash Map是一种基于键值对的数据结构&#xff0c;通过散列函数将键映射到存储位置&#xff0c;实现快速的数据查找和存储。它可以在常数时间内完成查找、插入和删除操作&#xff0c;因此在需要频繁进行这些操作时非常高效。 2. Hash Map的定义 散列表&#xff…...

剪画小程序:视频剪辑-视频播放倍数的调整与应用

在这个快节奏的时代&#xff0c;时间变得越来越宝贵&#xff0c;而视频倍数播放功能就像是我们的时间管理小助手&#xff0c;为我们的视频观看带来了极大的便利。你是否好奇它到底能在哪些地方发挥作用呢&#xff1f;让我们一起来看看&#xff01; 只要使用小程序【剪画】的里…...

使用 Java Swing 和 XChart 创建多种图表

在现代应用程序开发中&#xff0c;数据可视化是一个关键部分。本文将介绍如何使用 Java Swing 和 XChart 库创建各种类型的图表。XChart 是一个轻量级的图表库&#xff0c;支持多种类型的图表&#xff0c;非常适合在 Java 应用中进行快速的图表绘制。 1、环境配置 在开始之前&…...

信息系统运维管理:实践与发展

信息系统运维管理&#xff1a;实践与发展 信息系统运维管理在现代企业中扮演着至关重要的角色&#xff0c;确保信息系统的高效、安全和稳定运行。本文结合《信息系统运维管理》文档内容&#xff0c;探讨了服务设计阶段、服务转换阶段、委托系统维护管理三个主要章节&#xff0…...

html+js+css登录注册界面

拥有向服务器发送登录或注册数据并接收返回数据的功能 点赞关注 界面 源代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>Login and Registration Form</title> <style> * …...

英伟达(NVIDIA)数据中心GPU介绍

英伟达&#xff08;NVIDIA&#xff09;数据中心GPU按性能由高到低排行&#xff1a; 1. NVIDIA H100 架构&#xff1a;Hopper 核心数量&#xff1a;18352 CUDA Cores, 1456 Tensor Cores 显存&#xff1a;80 GB HBM3 峰值性能&#xff1a; 单精度&#xff08;FP32&#xff09…...

Leetcode 3202. Find the Maximum Length of Valid Subsequence II

Leetcode 3202. Find the Maximum Length of Valid Subsequence II 1. 解题思路2. 代码实现 题目链接&#xff1a;3202. Find the Maximum Length of Valid Subsequence II 1. 解题思路 这一题的话是上一题3201. Find the Maximum Length of Valid Subsequence I的升级版&am…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...