Python 数据库连接
Python数据库连接[编辑 | 编辑源代码]
介绍[编辑 | 编辑源代码]
Python数据库连接是指在Python程序中与数据库建立通信的过程,允许开发者执行SQL查询、插入、更新和删除数据等操作。Python通过多种数据库适配器(如`sqlite3`、`psycopg2`、`MySQLdb`等)支持与关系型数据库(如SQLite、PostgreSQL、MySQL)和非关系型数据库(如MongoDB)的交互。本节将详细介绍Python中常见的数据库连接方式及其实际应用。
数据库连接的基本步骤[编辑 | 编辑源代码]
Python连接数据库通常遵循以下步骤: 1. 导入数据库适配器模块:选择适合目标数据库的Python库。 2. 建立连接:使用适配器提供的函数创建与数据库的连接。 3. 创建游标:通过连接对象创建游标(Cursor),用于执行SQL语句。 4. 执行SQL操作:通过游标执行查询或修改数据的命令。 5. 提交或回滚事务:确认更改(commit)或撤销(rollback)。 6. 关闭连接:释放资源。
常见数据库连接示例[编辑 | 编辑源代码]
SQLite[编辑 | 编辑源代码]
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("SELECT * FROM users")
print(cursor.fetchall()) # 输出: [(1, 'Alice', 25)]
# 提交更改并关闭连接
conn.commit()
conn.close()
MySQL[编辑 | 编辑源代码]
需安装`mysql-connector-python`或`PyMySQL`库。
import pymysql
# 建立连接
conn = pymysql.connect(
host='localhost',
user='root',
password='password',
database='test_db'
)
cursor = conn.cursor()
cursor.execute("SELECT VERSION()")
print(f"MySQL版本: {cursor.fetchone()[0]}") # 输出类似: MySQL版本: 8.0.25
conn.close()
PostgreSQL[编辑 | 编辑源代码]
需安装`psycopg2`库。
import psycopg2
conn = psycopg2.connect(
host="localhost",
database="mydb",
user="postgres",
password="secret"
)
cursor = conn.cursor()
cursor.execute("SELECT * FROM products WHERE price > %s", (50,))
print(cursor.fetchall()) # 输出符合条件的产品列表
conn.close()
ORM工具[编辑 | 编辑源代码]
对象关系映射(ORM)工具如SQLAlchemy和Django ORM提供了更高层次的数据库操作方式:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
engine = create_engine('sqlite:///orm_example.db')
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
# 创建表
Base.metadata.create_all(engine)
# 插入数据
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
session = Session()
session.add(User(name="Bob", age=30))
session.commit()
连接池技术[编辑 | 编辑源代码]
对于高并发应用,连接池(如`DBUtils`)可显著提升性能:
from dbutils.pooled_db import PooledDB
import pymysql
pool = PooledDB(
creator=pymysql,
host='localhost',
user='root',
password='password',
database='test_db',
maxconnections=10
)
# 从池中获取连接
conn = pool.connection()
cursor = conn.cursor()
cursor.execute("SELECT * FROM large_table")
conn.close() # 实际返回到连接池
事务管理[编辑 | 编辑源代码]
Python数据库连接支持ACID事务:
try:
conn = sqlite3.connect('bank.db')
cursor = conn.cursor()
cursor.execute("UPDATE accounts SET balance = balance - 100 WHERE id = 1")
cursor.execute("UPDATE accounts SET balance = balance + 100 WHERE id = 2")
conn.commit() # 只有两个操作都成功时才提交
except Exception as e:
conn.rollback() # 任一失败则回滚
print(f"事务失败: {e}")
finally:
conn.close()
安全注意事项[编辑 | 编辑源代码]
1. 始终使用参数化查询防止SQL注入:
# 错误方式(不安全)
cursor.execute(f"SELECT * FROM users WHERE name = '{user_input}'")
# 正确方式
cursor.execute("SELECT * FROM users WHERE name = %s", (user_input,))
2. 限制数据库用户权限 3. 加密敏感连接信息
性能优化[编辑 | 编辑源代码]
- 使用连接池减少连接创建开销
- 批量操作代替单条操作:
# 低效方式
for item in items:
cursor.execute("INSERT INTO table VALUES (?)", (item,))
# 高效方式
cursor.executemany("INSERT INTO table VALUES (?)", [(item,) for item in items])
- 为常用查询创建索引
实际应用案例[编辑 | 编辑源代码]
电商平台库存管理系统: 1. 使用PostgreSQL存储产品信息 2. 通过SQLAlchemy ORM管理产品分类 3. 采用连接池处理高并发订单 4. 事务确保库存扣减与订单创建的原子性
总结[编辑 | 编辑源代码]
Python数据库连接是Web开发的核心技能,从简单的SQLite嵌入式数据库到复杂的PostgreSQL集群,Python都提供了完善的接口支持。掌握连接管理、ORM工具和性能优化技术,能够构建高效可靠的数据驱动应用。