白骑士的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实现图书管理系统
前言 首先既然是管理系统,那咱们就要实现以下这几个功能了--> 分析 1.首先是用户分为两种,一个是管理员,另一个是普通用户,既如此,可以定义一个用户类(user),在定义管理员类&am…...
利用DeepFlow解决APISIX故障诊断中的方向偏差问题
概要:随着APISIX作为IT应用系统入口的普及,其故障定位能力的不足导致了在业务故障诊断中,APISIX常常成为首要的“嫌疑对象”。这不仅导致了“兴师动众”式的资源投入,还可能使诊断方向“背道而驰”,从而导致业务故障“…...
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 的核心原理几个关键点 约定优于配置: Spring Boot 遵循约定优于配置的理念,通过预定义的约定,大大简化了 Spring 应用程序的配置和部署。例如,它自动配置了许多常见的开发任务(如数据库连接、Web 服务器配…...
用随机森林算法进行的一次故障预测
本案例将带大家使用一份开源的S.M.A.R.T.数据集和机器学习中的随机森林算法,来训练一个硬盘故障预测模型,并测试效果。 实验目标 掌握使用机器学习方法训练模型的基本流程;掌握使用pandas做数据分析的基本方法;掌握使用scikit-l…...
24位DAC转换的FPGA设计及将其封装成自定义IP核的方法
在vivado设计中,为了方便的使用Block Desgin进行设计,可以使用vivado软件把自己编写的代码封装成IP核,封装后的IP核和原来的代码具有相同的功能。本文以实现24位DA转换(含并串转换,使用的数模转换器为CL4660)为例,介绍VIVADO封装IP核的方法及调用方法,以及DAC转换的详细…...
【大模型LLM面试合集】大语言模型基础_llm概念
1.llm概念 1.目前 主流的开源模型体系 有哪些? 目前主流的开源LLM(语言模型)模型体系包括以下几个: GPT(Generative Pre-trained Transformer)系列:由OpenAI发布的一系列基于Transformer架构…...
Qt时间日期处理与定时器使用总结
一、日期时间数据 1.QTime 用于存储和操作时间数据的类,其中包括小时(h)、分钟(m)、秒(s)、毫秒(ms)。函数定义如下: //注:秒(s)和毫秒(ms)有默认值0 QTime::QTime(int h, int m, int s 0, int ms 0) 若无须初始化时间数据,可…...
数据结构——Hash Map
1. Hash Map简介 Hash Map是一种基于键值对的数据结构,通过散列函数将键映射到存储位置,实现快速的数据查找和存储。它可以在常数时间内完成查找、插入和删除操作,因此在需要频繁进行这些操作时非常高效。 2. Hash Map的定义 散列表ÿ…...
剪画小程序:视频剪辑-视频播放倍数的调整与应用
在这个快节奏的时代,时间变得越来越宝贵,而视频倍数播放功能就像是我们的时间管理小助手,为我们的视频观看带来了极大的便利。你是否好奇它到底能在哪些地方发挥作用呢?让我们一起来看看! 只要使用小程序【剪画】的里…...
使用 Java Swing 和 XChart 创建多种图表
在现代应用程序开发中,数据可视化是一个关键部分。本文将介绍如何使用 Java Swing 和 XChart 库创建各种类型的图表。XChart 是一个轻量级的图表库,支持多种类型的图表,非常适合在 Java 应用中进行快速的图表绘制。 1、环境配置 在开始之前&…...
信息系统运维管理:实践与发展
信息系统运维管理:实践与发展 信息系统运维管理在现代企业中扮演着至关重要的角色,确保信息系统的高效、安全和稳定运行。本文结合《信息系统运维管理》文档内容,探讨了服务设计阶段、服务转换阶段、委托系统维护管理三个主要章节࿰…...
html+js+css登录注册界面
拥有向服务器发送登录或注册数据并接收返回数据的功能 点赞关注 界面 源代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>Login and Registration Form</title> <style> * …...
英伟达(NVIDIA)数据中心GPU介绍
英伟达(NVIDIA)数据中心GPU按性能由高到低排行: 1. NVIDIA H100 架构:Hopper 核心数量:18352 CUDA Cores, 1456 Tensor Cores 显存:80 GB HBM3 峰值性能: 单精度(FP32)…...
Leetcode 3202. Find the Maximum Length of Valid Subsequence II
Leetcode 3202. Find the Maximum Length of Valid Subsequence II 1. 解题思路2. 代码实现 题目链接:3202. Find the Maximum Length of Valid Subsequence II 1. 解题思路 这一题的话是上一题3201. Find the Maximum Length of Valid Subsequence I的升级版&am…...
【巴法云】零代码安卓App开发:用App Inventor + MQTT + ESP8266打造智能硬件遥控器
1. 零代码开发智能硬件遥控器的魅力 想象一下,你躺在沙发上发现忘关客厅的灯,这时候掏出手机点一下就能远程关灯;或者夏天回家前提前打开空调,进门就能享受清凉。这些智能家居场景现在用App Inventor 巴法云 ESP8266组合就能轻松…...
鸿蒙ArkTS项目避坑指南:从零搭建外卖应用时,我踩过的那些‘坑’
鸿蒙ArkTS实战避坑手册:外卖应用开发中的12个致命陷阱 第一次在DevEco Studio里看到ArkTS的语法高亮时,我以为这不过是又一个前端框架的变种——直到我的外卖应用项目在模拟器上连续崩溃了七次。作为从Android原生开发转向鸿蒙的"老手"&#x…...
如何用Java处理地震波?信号滤波算法
常用的地震波信号滤波算法包括傅里叶转换(fft)与频域滤波器、fir滤波器、iir滤波器和中值滤波器一起。. 通过将时域信号转换为频域,java可以通过apache实现特定频率组件的操作 commons math库中的fastfouriertransformer类实现;2.…...
告别模拟信号烦恼:手把手教你用51单片机驱动DAC0832输出正弦波(附Proteus仿真)
51单片机实战:用DAC0832打造完美正弦波发生器 在电子设计领域,能够精确生成模拟信号是一项基础却至关重要的技能。想象一下,当你亲手搭建的电路在示波器上显示出光滑的正弦波形时,那种成就感是无与伦比的。本文将带你从零开始&…...
城市开车GPS总飘?试试给惯性导航(INS)加个“车轮锁”:NHC/ODO约束原理通俗解读
城市开车GPS总飘?试试给惯性导航(INS)加个“车轮锁”:NHC/ODO约束原理通俗解读 你是否遇到过这样的场景:开车穿过高楼林立的CBD时,车载导航突然开始"鬼畜漂移"?或是驶入隧道后&#x…...
掌握NeuralForecast:构建企业级时间序列预测解决方案
掌握NeuralForecast:构建企业级时间序列预测解决方案 【免费下载链接】neuralforecast Nixtla/neuralforecast - 一个Python库,提供统一的接口来训练和预测时间序列数据,使用神经网络方法,如N-BEATS和N-HITS,以及传统的…...
用过才敢说!盘点2026年备受喜爱的的AI论文平台
一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文平台,覆盖选题构思、文献整理、内容生成、降重润色等核心场景,帮你高效搞定论文,告别熬夜赶稿! 一、全流程王者:一站式搞定论文全链路…...
nli-distilroberta-base效果展示:Entailment/Contradiction/Neutral三类判别置信度热力图
nli-distilroberta-base效果展示:Entailment/Contradiction/Neutral三类判别置信度热力图 1. 项目概述 nli-distilroberta-base是基于DistilRoBERTa模型的自然语言推理(NLI)Web服务,专门用于分析两个句子之间的逻辑关系。这个轻量级模型能够快速准确地…...
如何快速掌握Sionna:下一代无线通信仿真的终极指南
如何快速掌握Sionna:下一代无线通信仿真的终极指南 【免费下载链接】sionna Sionna: An Open-Source Library for Next-Generation Physical Layer Research 项目地址: https://gitcode.com/gh_mirrors/si/sionna Sionna是一个基于TensorFlow的开源Python库&…...
工业自动化场景信捷 PLC EtherNet/IP 转 TCP/IP 通信方案
EtherNet/IP转TCP/IP网关应用:信捷PLC工业自动化数据采集实战案例一、项目背景本次项目落地于国内某大型3C电子精密组装工厂,聚焦智能手机中框自动化组装产线,属于当前工业自动化领域高增速、高前景的主流场景,也是工业物联网落地…...
