网站首页 > 教程文章 正文
16.1 引言
几乎所有实际项目都离不开数据持久化,而数据库是最常用的存储方式。
本章我们将学习:
- 使用 sqlite3 操作 SQLite 数据库
- 使用 pymysql 操作 MySQL 数据库
- 使用 ORM(SQLAlchemy)进行对象化数据库操作
16.2 使用 SQLite 数据库(内置库)
16.2.1 创建数据库和表
示例:
import sqlite3
# 连接数据库(如果不存在则创建)
conn = sqlite3.connect("demo.db")
cursor = conn.cursor()
# 创建表
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
)
""")
conn.commit()
conn.close()
16.2.2 插入与查询数据
示例:
conn = sqlite3.connect("demo.db")
cursor = conn.cursor()
# 插入
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("Alice", 20))
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("Bob", 25))
conn.commit()
# 查询
cursor.execute("SELECT * FROM users")
for row in cursor.fetchall():
print(row)
conn.close()
输出:
(1, 'Alice', 20)
(2, 'Bob', 25)
16.3 使用 MySQL 数据库(pymysql)
16.3.1 安装与连接
安装:
pip install pymysql
示例:
import pymysql
conn = pymysql.connect(
host="localhost",
user="root",
password="yourpassword",
database="testdb",
charset="utf8mb4"
)
cursor = conn.cursor()
cursor.execute("SELECT VERSION()")
print("数据库版本:", cursor.fetchone())
conn.close()
16.3.2 CRUD 操作
示例:
conn = pymysql.connect(host="localhost", user="root",
password="yourpassword", database="testdb")
cursor = conn.cursor()
# 创建表
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
age INT
)
""")
# 插入数据
cursor.execute("INSERT INTO users (name, age) VALUES (%s, %s)", ("Charlie", 30))
conn.commit()
# 查询数据
cursor.execute("SELECT * FROM users")
for row in cursor.fetchall():
print(row)
conn.close()
16.4 使用 SQLAlchemy ORM
16.4.1 ORM 概念
- ORM(对象关系映射):用 Python 类来映射数据库表,用对象来操作数据库记录
- 减少 SQL 语句的书写,更面向对象
16.4.2 基本使用
安装:
pip install sqlalchemy
示例:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import declarative_base, sessionmaker
# 1. 创建引擎
engine = create_engine("sqlite:///orm_demo.db", echo=True)
# 2. 声明模型基类
Base = declarative_base()
# 3. 定义模型类
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
# 4. 创建表
Base.metadata.create_all(engine)
# 5. 创建会话
Session = sessionmaker(bind=engine)
session = Session()
# 6. 插入数据
user = User(name="David", age=28)
session.add(user)
session.commit()
# 7. 查询数据
for u in session.query(User).all():
print(u.id, u.name, u.age)
会自动创建表,并进行增删改查。
16.5 小结
技术 | 适用场景 | 特点 |
sqlite3 | 小型项目、本地存储 | 内置库、零配置 |
pymysql | 中大型项目,远程数据库 | 性能高、需手写 SQL |
SQLAlchemy ORM | 复杂项目,面向对象操作数据库 | 自动生成 SQL、易维护 |
掌握这些技术后,你可以持久化保存应用数据,构建真正有状态的程序。
猜你喜欢
- 2025-09-23 5分钟快速掌握在Python使用SQLite数据库,
- 2025-09-23 ExcelVBA 连接 MySQL 数据库_vba怎么连接数据库sql
- 2025-09-23 Python+SQLite 终极实战指南:零基础到高效开发
- 2025-09-23 搭建electron+vite框架的三种方法
- 2025-09-23 免装环境!SQLite 可视化神器,Java 开发者速通指南
- 2025-09-23 没想到一个Trae的提示词工具,居然会有这么多人喜欢?
- 2025-09-23 SQLite线程模式讲解_简述sqlite3的功能
- 2025-09-23 ExcelVBA:创建SQLite数据库,以及CRUD基本操作函数(1/2)
- 2025-09-23 Qt编程进阶(21):Qt操作SQLite数据库及实例
- 2025-09-23 Python (Sqlite)用事务写多表数据的简单例子
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- mybatis plus page (35)
- vue @scroll (38)
- 堆栈区别 (33)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)
- redis aof rdb 区别 (33)
- 302跳转 (33)
- http method (35)
- js array splice (33)
