Python数据库实战指南:SQLite、MySQL与PostgreSQL对比及ORM应用
本文深入解析Python与SQLite、MySQL、PostgreSQL三种主流数据库的交互方式,对比各自在轻量级、高并发及高级特性上的优劣。文章详细演示了sqlite3、pymysql及psycopg2库的使用,并介绍SQLAlchemy与Django ORM等框架及连接池配置,为非科班转行者提供从基础操作到项目实战的完整学习路径。
本文作者分享了从非计算机专业转行学习Python及数据库交互的经验,重点对比了SQLite、MySQL和PostgreSQL三种数据库的基本概念、使用场景及优缺点。内容涵盖SQLAlchemy和Django ORM等对象关系映射框架的应用,以及数据库连接池的配置技巧,旨在为非科班背景的学习者提供实用的实践项目建议、学习心得及注意事项。
一、SQLite数据库
1.1 SQLite简介
SQLite是一种轻量级的嵌入式关系型数据库,其最大特点是不需要独立的服务器进程,所有数据均存储在一个单一的文件中:
- 轻量级:核心库体积小巧,非常适合嵌入式应用环境
- 无需配置:无需安装或配置独立的数据库服务器
- 跨平台:兼容多种操作系统环境
- ACID兼容:完整支持原子性、一致性、隔离性和持久性事务特性
1.2 使用sqlite3模块
Python标准库内置了sqlite3模块,开发者可直接通过该模块与SQLite数据库进行交互:
import sqlite3
# 连接到SQLite数据库
# 如果数据库不存在,会自动创建
conn = sqlite3.connect('example.db')
# 创建游标
cursor = conn.cursor()
# 创建表
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER,
email TEXT UNIQUE
)
''')
# 插入数据
cursor.execute("INSERT INTO users (name, age, email) VALUES (?, ?, ?)", ('Alice', 25, 'alice@example.com'))
cursor.execute("INSERT INTO users (name, age, email) VALUES (?, ?, ?)", ('Bob', 30, 'bob@example.com'))
# 提交事务
conn.commit()
# 查询数据
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
print(row)
# 更新数据
cursor.execute("UPDATE users SET age = ? WHERE name = ?", (26, 'Alice'))
conn.commit()
# 删除数据
cursor.execute("DELETE FROM users WHERE name = ?", ('Bob',))
conn.commit()
# 关闭连接
conn.close()
1.3 使用SQLite的优势
- 无需安装:Python环境自带支持,开箱即用
- 易于使用:API设计简单直观,上手容易
- 适合小型应用:在数据量不大的应用场景下表现优异
- 便于测试:非常适合用于单元测试和集成测试环境
二、MySQL数据库
2.1 MySQL简介
MySQL是目前广泛流行的关系型数据库管理系统之一:
- 功能强大:支持复杂的SQL语句执行及事务处理
- 可扩展性:架构设计适合大型应用的高负载需求
- 社区活跃:拥有庞大且活跃的开发者社区支持
- 开源免费:作为开源软件,可免费使用
2.2 使用pymysql库
需通过pip安装pymysql库,以便在Python中与MySQL数据库进行交互:
# 安装pymysql
# pip install pymysql
import pymysql
# 连接到MySQL数据库
conn = pymysql.connect(
host='localhost',
user='root',
password='password',
database='test',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
# 创建游标
cursor = conn.cursor()
# 创建表
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
age INT,
email VARCHAR(255) UNIQUE
)
''')
# 插入数据
cursor.execute("INSERT INTO users (name, age, email) VALUES (%s, %s, %s)", ('Alice', 25, 'alice@example.com'))
cursor.execute("INSERT INTO users (name, age, email) VALUES (%s, %s, %s)", ('Bob', 30, 'bob@example.com'))
# 提交事务
conn.commit()
# 查询数据
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
print(row)
# 更新数据
cursor.execute("UPDATE users SET age = %s WHERE name = %s", (26, 'Alice'))
conn.commit()
# 删除数据
cursor.execute("DELETE FROM users WHERE name = %s", ('Bob',))
conn.commit()
# 关闭连接
conn.close()
2.3 使用MySQL的优势
- 适合大型应用:能够支持高并发访问及海量数据存储
- 功能丰富:支持复杂SQL语句及存储过程等高级功能
- 生态成熟:拥有极其丰富的工具集和第三方库支持
- 社区支持:具备庞大的社区资源和完善的文档体系
三、PostgreSQL数据库
3.1 PostgreSQL简介
PostgreSQL是一款功能强大的开源关系型数据库系统:
- 高级特性:支持复杂的数据类型定义及高级查询功能
- 可扩展性:允许用户自定义数据类型及函数扩展
- 可靠性:具备强大的事务支持机制,保障数据完整性
- 开源免费:作为开源软件,可免费使用
3.2 使用psycopg2库
需通过pip安装psycopg2库,以便在Python中与PostgreSQL数据库进行交互:
# 安装psycopg2
# pip install psycopg2-binary
import psycopg2
# 连接到PostgreSQL数据库
conn = psycopg2.connect(
host='localhost',
user='postgres',
password='password',
database='test',
port=5432
)
# 创建游标
cursor = conn.cursor()
# 创建表
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
age INTEGER,
email VARCHAR(255) UNIQUE
)
''')
# 插入数据
cursor.execute("INSERT INTO users (name, age, email) VALUES (%s, %s, %s)", ('Alice', 25, 'alice@example.com'))
cursor.execute("INSERT INTO users (name, age, email) VALUES (%s, %s, %s)", ('Bob', 30, 'bob@example.com'))
# 提交事务
conn.commit()
# 查询数据
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
print(row)
# 更新数据
cursor.execute("UPDATE users SET age = %s WHERE name = %s", (26, 'Alice'))
conn.commit()
# 删除数据
cursor.execute("DELETE FROM users WHERE name = %s", ('Bob',))
conn.commit()
# 关闭连接
conn.close()
3.3 使用PostgreSQL的优势
- 高级特性:原生支持JSON、数组等复杂数据类型处理
- 可扩展性:支持自定义数据类型及函数扩展
- 可靠性:具备强大的事务支持机制,保障数据完整性
- 安全性:内置强大的安全特性及访问控制机制
四、使用ORM框架
4.1 SQLAlchemy
SQLAlchemy是Python生态中流行且强大的对象关系映射(ORM)框架:
# 安装SQLAlchemy
# pip install SQLAlchemy
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# 创建数据库引擎
# SQLite
engine = create_engine('sqlite:///example.db')
# MySQL
# engine = create_engine('mysql+pymysql://root:password@localhost/test')
# PostgreSQL
# engine = create_engine('postgresql://postgres:password@localhost/test')
# 创建基类
Base = declarative_base()
# 定义模型
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(255), nullable=False)
age = Column(Integer)
email = Column(String(255), unique=True)
# 创建表
Base.metadata.create_all(engine)
# 创建会话
Session = sessionmaker(bind=engine)
session = Session()
# 插入数据
user1 = User(name='Alice', age=25, email='alice@example.com')
user2 = User(name='Bob', age=30, email='bob@example.com')
session.add(user1)
session.add(user2)
session.commit()
# 查询数据
users = session.query(User).all()
for user in users:
print(user.id, user.name, user.age, user.email)
# 更新数据
user = session.query(User).filter_by(name='Alice').first()
user.age = 26
session.commit()
# 删除数据
user = session.query(User).filter_by(name='Bob').first()
session.delete(user)
session.commit()
# 关闭会话
session.close()
4.2 Django ORM
Django ORM是Django Web框架内置的对象关系映射工具:
# models.py
from django.db import models
class User(models.Model):
name = models.CharField(max_length=255)
age = models.IntegerField()
email = models.EmailField(unique=True)
def __str__(self):
return self.name
# 使用Django ORM
# 创建用户
user = User.objects.create(name='Alice', age=25, email='alice@example.com')
# 查询用户
users = User.objects.all()
for user in users:
print(user)
# 更新用户
user = User.objects.get(name='Alice')
user.age = 26
user.save()
# 删除用户
user = User.objects.get(name='Alice')
user.delete()
五、数据库连接池
5.1 使用连接池
对于高并发应用场景,配置数据库连接池可显著提升系统性能:
# 安装SQLAlchemy
# pip install SQLAlchemy
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.pool import QueuePool
# 创建带有连接池的引擎
engine = create_engine(
'mysql+pymysql://root:password@localhost/test',
poolclass=QueuePool,
pool_size=10,
max_overflow=20,
pool_pre_ping=True
)
# 创建会话
Session = sessionmaker(bind=engine)
session = Session()
# 使用会话
# ...
# 关闭会话
session.close()
六、Python与Rust的对比
作为同时学习Python和Rust的转行开发者,通过对比学习这两种语言能带来很好的效果:
6.1 数据库交互对比
- Python:拥有极其丰富的数据库驱动及ORM框架生态
- Rust:拥有diesel、sqlx等成熟的ORM框架
- 开发效率:Python开发效率较高,Rust开发效率相对较低
- 性能:Rust运行性能优异,Python运行性能相对较低
6.2 学习心得
- Python的优势:开发效率高,生态系统丰富
- Rust的优势:运行性能优异,内存安全保证
- 相互借鉴:从Python中学习快速开发模式,从Rust中学习性能优化技巧
七、实践项目推荐
7.1 数据库项目
- 用户管理系统:实现用户的增删改查功能
- 博客系统:实现文章的发布及管理功能
- 电商系统:实现商品及订单的管理功能
- 数据分析系统:实现数据的存储及分析功能
八、学习方法和技巧
8.1 学习方法
- 循序渐进:先掌握基础的数据库操作,再深入学习高级特性
- 项目实践:通过实际项目来巩固所学知识
- 文档阅读:仔细阅读数据库及ORM框架的官方文档
- 社区交流:加入技术社区,向他人学习经验
8.2 常见问题和解决方法
- 连接问题:检查数据库服务是否运行,确认连接参数是否正确
- 性能问题:使用索引,优化SQL语句,配置使用连接池
- 安全问题:使用参数化查询,避免SQL注入攻击
- 数据一致性:使用事务机制,确保数据的一致性
九、总结
Python与数据库的交互是编程工作中至关重要的一环。作为一名非计算机专业转行的开发者,我深刻体会到掌握数据库技术的重要性。
我的学习过程并非一帆风顺,期间遇到了诸多困难和挫折,但通过不断的实践与学习,我逐渐掌握了Python与数据库交互的各种技巧。
到此这篇关于Python数据库学习心得:SQLite、MySQL、PostgreSQL优缺点的文章就介绍到这了,更多相关Python数据库:SQLite、MySQL、PostgreSQL内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









