数据库操作
数据库是应用程序中用于存储和管理数据的核心组件。Python 提供了多种与数据库交互的方式,支持不同类型的数据库,包括关系型数据库(如 MySQL、PostgreSQL)和 NoSQL 数据库(如 MongoDB)。在这篇文章中,我们将介绍 Python 如何与常见的数据库进行操作。
1. 关系型数据库
关系型数据库(Relational Database)使用表的形式存储数据,并通过 SQL(结构化查询语言)来进行数据查询和操作。常见的关系型数据库包括 MySQL、PostgreSQL、SQLite 等。
1.1 使用 SQLite
SQLite 是一种轻量级的关系型数据库,Python 内置了对 SQLite 的支持,无需安装其他软件或驱动。
创建 SQLite 数据库并执行基本操作
import sqlite3# 连接到 SQLite 数据库,如果数据库不存在则会自动创建
conn = sqlite3.connect('example.db')# 创建一个游标对象,用于执行 SQL 语句
cursor = conn.cursor()# 创建一个表
cursor.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL,age INTEGER NOT NULL)''')# 插入数据
cursor.execute("INSERT INTO users (name, age) VALUES ('Alice', 30)")
cursor.execute("INSERT INTO users (name, age) VALUES ('Bob', 25)")# 提交事务
conn.commit()# 查询数据
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()for row in rows:print(row)# 关闭连接
conn.close()
代码说明:
- 我们首先连接到一个名为
example.db
的 SQLite 数据库。 - 使用 SQL 语句创建一个名为
users
的表,包含id
、name
和age
三列。 - 然后,插入了两条数据并通过
SELECT
语句查询数据库中的所有数据。 - 最后关闭数据库连接。
1.2 使用 MySQL
MySQL 是一种常用的开源关系型数据库管理系统。要使用 MySQL 进行 Python 编程,你需要安装 mysql-connector-python
库:
pip install mysql-connector-python
连接 MySQL 数据库并执行基本操作
import mysql.connector# 连接到 MySQL 数据库
conn = mysql.connector.connect(host="localhost",user="root",password="your_password",database="test_db"
)# 创建一个游标对象
cursor = conn.cursor()# 创建一个表
cursor.execute('''CREATE TABLE IF NOT EXISTS employees (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) NOT NULL,salary DECIMAL(10, 2) NOT NULL)''')# 插入数据
cursor.execute("INSERT INTO employees (name, salary) VALUES (%s, %s)", ('John Doe', 50000.00))
cursor.execute("INSERT INTO employees (name, salary) VALUES (%s, %s)", ('Jane Smith', 60000.00))# 提交事务
conn.commit()# 查询数据
cursor.execute("SELECT * FROM employees")
rows = cursor.fetchall()for row in rows:print(row)# 关闭连接
conn.close()
代码说明:
- 使用
mysql.connector.connect
函数连接到 MySQL 数据库。 - 使用
CREATE TABLE
创建一个名为employees
的表。 - 使用
INSERT INTO
插入数据,并通过SELECT
查询表中的所有数据。
1.3 使用 PostgreSQL
PostgreSQL 是另一种强大的开源关系型数据库。要使用 PostgreSQL 进行 Python 编程,你需要安装 psycopg2
库:
pip install psycopg2
连接 PostgreSQL 数据库并执行基本操作
import psycopg2# 连接到 PostgreSQL 数据库
conn = psycopg2.connect(host="localhost",database="test_db",user="postgres",password="your_password"
)# 创建一个游标对象
cursor = conn.cursor()# 创建一个表
cursor.execute('''CREATE TABLE IF NOT EXISTS products (id SERIAL PRIMARY KEY,name VARCHAR(255) NOT NULL,price NUMERIC(10, 2) NOT NULL)''')# 插入数据
cursor.execute("INSERT INTO products (name, price) VALUES (%s, %s)", ('Laptop', 1200.00))
cursor.execute("INSERT INTO products (name, price) VALUES (%s, %s)", ('Phone', 800.00))# 提交事务
conn.commit()# 查询数据
cursor.execute("SELECT * FROM products")
rows = cursor.fetchall()for row in rows:print(row)# 关闭连接
conn.close()
代码说明:
- 使用
psycopg2.connect
函数连接到 PostgreSQL 数据库。 - 使用 SQL 语句创建
products
表,并插入产品数据。 - 使用
SELECT
查询数据并输出。
2. NoSQL 数据库
NoSQL 数据库以非表格的方式存储数据,适合处理大规模数据集。常见的 NoSQL 数据库包括 MongoDB、Redis 等。
2.1 使用 MongoDB
MongoDB 是一种流行的 NoSQL 数据库,使用 BSON(类似 JSON)格式来存储数据。要使用 MongoDB 与 Python 进行交互,需要安装 pymongo
库:
pip install pymongo
连接 MongoDB 并执行基本操作
from pymongo import MongoClient# 连接到 MongoDB 数据库
client = MongoClient('localhost', 27017)# 选择数据库和集合
db = client['test_db']
collection = db['users']# 插入文档
user_data = {"name": "Alice", "age": 30}
collection.insert_one(user_data)# 查询文档
for user in collection.find():print(user)# 更新文档
collection.update_one({"name": "Alice"}, {"$set": {"age": 31}})# 删除文档
collection.delete_one({"name": "Alice"})# 关闭连接
client.close()
代码说明:
- 使用
MongoClient
连接到 MongoDB 服务器,并选择test_db
数据库中的users
集合。 - 插入一个用户文档,并使用
find
方法查询所有文档。 - 更新用户文档中的年龄字段,并删除用户。
3. 数据库连接池
对于大规模的应用程序,使用数据库连接池能够提高性能,避免每次请求都需要重新建立数据库连接。Python 中的 SQLAlchemy
和 DBUtils
库提供了数据库连接池的支持。
3.1 使用 SQLAlchemy 连接池
SQLAlchemy 是一个强大的 ORM 库,同时支持数据库连接池功能。
pip install sqlalchemy
创建 MySQL 连接池并执行操作
from sqlalchemy import create_engine# 创建连接池
engine = create_engine('mysql+mysqlconnector://root:password@localhost/test_db', pool_size=5, max_overflow=10)# 执行数据库操作
with engine.connect() as conn:result = conn.execute("SELECT * FROM employees")for row in result:print(row)
4. 小结
- Python 提供了多种方式与数据库进行交互,支持关系型数据库(如 SQLite、MySQL、PostgreSQL)和 NoSQL 数据库(如 MongoDB)。
- 使用
sqlite3
模块可以轻松操作 SQLite 数据库,适合轻量级应用。 - 通过第三方库
mysql-connector-python
和psycopg2
,可以连接和操作 MySQL 和 PostgreSQL 数据库。 pymongo
库提供了与 MongoDB 的接口,适合 NoSQL 数据库操作。- 数据库连接池提高了大规模应用的性能,使用
SQLAlchemy
可以实现连接池的管理。
掌握这些数据库操作方法,能让你在应用开发中灵活选择合适的数据库,并高效管理和处理数据。