数据库是存储和管理数据的核心组件。在 Python 中,我们可以使用多个数据库,如 SQLite、MySQL、PostgreSQL 和 MongoDB。本章将介绍如何使用 Python 连接数据库、执行 SQL 查询,并操作 NoSQL 数据库。
数据库主要分为两类:
常见的 SQL 语句:
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER
);
INSERT INTO users (name, age) VALUES ('Alice', 25);
SELECT * FROM users;
UPDATE users SET age = 26 WHERE name = 'Alice';
DELETE FROM users WHERE name = 'Alice';
SQLite 是 Python 内置的轻量级数据库,无需安装额外软件。
import sqlite3
# 连接数据库(如果不存在则创建)
conn = sqlite3.connect("test.db")
cursor = conn.cursor()
# 创建表
cursor.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)''')
# 插入数据
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ("Alice", 25))
# 查询数据
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
print(row)
# 提交更改并关闭连接
conn.commit()
conn.close()
MySQL 是流行的关系型数据库,适用于 Web 应用和大规模数据存储。
pip install mysql-connector-python
import mysql.connector
conn = mysql.connector.connect(
host="localhost",
user="root",
password="password",
database="test_db"
)
cursor = conn.cursor()
# 创建表
cursor.execute("CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), age INT)")
# 插入数据
cursor.execute("INSERT INTO users (name, age) VALUES (%s, %s)", ("Bob", 30))
# 查询数据
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
print(row)
conn.commit()
conn.close()
MongoDB 是 NoSQL 数据库,使用 JSON 格式存储数据,适用于大数据处理。
pip install pymongo
import pymongo
client = pymongo.MongoClient("mongodb://localhost:27017/")
db = client["test_db"]
collection = db["users"]
# 插入数据
collection.insert_one({"name": "Charlie", "age": 28})
# 查询数据
for user in collection.find():
print(user)
使用 SQLAlchemy 可以简化数据库操作,不需要手写 SQL 语句。
pip install 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:///test.db")
Base = declarative_base()
# 定义表结构
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
# 创建表
Base.metadata.create_all(engine)
# 创建会话
Session = sessionmaker(bind=engine)
session = Session()
# 插入数据
new_user = User(name="David", age=35)
session.add(new_user)
session.commit()
# 查询数据
users = session.query(User).all()
for user in users:
print(user.name, user.age)
SELECT *
,只查询需要的字段。本章介绍了: