1. 数据库的基本概念
1.1 表(Table)
- 表是数据库中存储数据的基本单位,由行和列组成。
- 例如:
users
表可以存储用户信息,每一行代表一个用户,每一列代表用户的属性(如姓名、年龄)。
1.2 字段(Field/Column)
- 字段是表中的列,用于存储特定类型的数据。
- 例如:
users
表中的name
字段存储用户的姓名,age
字段存储用户的年龄。
1.3 索引(Index)
- 索引是用于加速数据检索的数据结构,类似于书籍的目录。
- 例如:在
users
表的name
字段上创建索引,可以加快按姓名查询的速度。
1.4 主键(Primary Key)
- 主键是表中唯一标识每一行的字段,不能重复且不能为空。
- 例如:
users
表中的id
字段可以作为主键,确保每个用户有唯一的标识。
1.5 外键(Foreign Key)
- 外键是用于建立表与表之间关系的字段,指向另一张表的主键。
- 例如:
orders
表中的user_id
字段可以作为外键,指向users
表的id
字段,表示订单属于哪个用户。
1.6 事务(Transaction)
- 事务是一组数据库操作,要么全部成功,要么全部失败,确保数据的一致性。
- 例如:转账操作需要在一个事务中完成,确保从一个账户扣款和向另一个账户加款同时成功或失败。
2. Python 连接数据库的基本方法
Python 提供了多种库来连接和操作数据库,常见的包括 sqlite3
、pymysql
、psycopg2
等。以下是 Python 连接数据库的基本方法以及数据库的基本概念。
2.1 SQLite
SQLite 是一个轻量级的嵌入式数据库,适合小型应用或原型开发。Python 内置了 sqlite3
模块,无需额外安装。
连接 SQLite 数据库
python">import sqlite3# 连接数据库(如果不存在则创建)
conn = sqlite3.connect('example.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)")# 提交事务
conn.commit()# 查询数据
cursor.execute("SELECT * FROM users")
print(cursor.fetchall())# 关闭连接
conn.close()
2.2 MySQL
MySQL 是一个流行的关系型数据库,使用 pymysql
库可以连接 MySQL 数据库。
安装 pymysql
pip install pymysql
连接 MySQL 数据库
python">import pymysql# 连接数据库
conn = pymysql.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 ('Bob', 30)")# 提交事务
conn.commit()# 查询数据
cursor.execute("SELECT * FROM users")
print(cursor.fetchall())# 关闭连接
conn.close()
2.3 PostgreSQL
PostgreSQL 是一个功能强大的开源关系型数据库,使用 psycopg2
库可以连接 PostgreSQL 数据库。
安装 psycopg2
pip install psycopg2
连接 PostgreSQL 数据库
python">import psycopg2# 连接数据库
conn = psycopg2.connect(host='localhost',user='postgres',password='password',database='test_db'
)# 创建游标对象
cursor = conn.cursor()# 创建表
cursor.execute('''CREATE TABLE IF NOT EXISTS users(id SERIAL PRIMARY KEY, name VARCHAR(255), age INT)''')# 插入数据
cursor.execute("INSERT INTO users (name, age) VALUES ('Charlie', 35)")# 提交事务
conn.commit()# 查询数据
cursor.execute("SELECT * FROM users")
print(cursor.fetchall())# 关闭连接
conn.close()
2.4 示例:数据库操作的综合应用
以下是一个综合示例,展示如何使用 Python 连接 SQLite 数据库,并进行基本的增删改查操作。
python">import sqlite3# 连接数据库
conn = sqlite3.connect('example.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("INSERT INTO users (name, age) VALUES ('Bob', 30)")# 提交事务
conn.commit()# 查询数据
cursor.execute("SELECT * FROM users")
print("查询结果:", cursor.fetchall())# 更新数据
cursor.execute("UPDATE users SET age = 26 WHERE name = 'Alice'")
conn.commit()# 删除数据
cursor.execute("DELETE FROM users WHERE name = 'Bob'")
conn.commit()# 查询数据
cursor.execute("SELECT * FROM users")
print("更新后的查询结果:", cursor.fetchall())# 关闭连接
conn.close()