MySQL作为最流行的开源关系型数据库之一,与Python的结合在Web开发、数据分析等领域应用广泛。本文将全面介绍如何使用Python实现MySQL数据库的增删改查(CRUD)操作,包含基础连接、安全实践以及高效操作技巧。
一、环境准备与数据库连接
1.1 安装必要的库
Python操作MySQL主要使用PyMySQL
或mysql-connector-python
库:
pip install pymysql
# 或
pip install mysql-connector-python
1.2 建立数据库连接
import pymysql
# 创建连接配置字典
db_config = {
'host': 'localhost',
'user': 'your_username',
'password': 'your_password',
'database': 'your_database',
'charset': 'utf8mb4',
'cursorclass': pymysql.cursors.DictCursor # 返回字典形式的结果
}
def get_connection():
"""获取数据库连接"""
try:
connection = pymysql.connect(**db_config)
print("数据库连接成功")
return connection
except pymysql.Error as e:
print(f"数据库连接失败: {
e}")
return None
关键参数说明:
charset
: 推荐使用utf8mb4以支持完整的Unicode字符(如emoji)cursorclass
: 设置为DictCursor可使查询结果以字典形式返回
二、数据查询操作
2.1 基础查询
def query_data(connection, sql, params=None):
"""执行查询操作"""
try:
with connection.cursor() as cursor:
cursor.execute(sql, params) # 使用参数化查询防止SQL注入
result = cursor.fetchall() # 获取所有记录
return result
except pymysql.Error as e:
print(f"查询数据失败: {
e}")
return None
finally:
connection.close() # 查询完成后关闭连接
# 使用示例
conn = get_connection()
users = query_data(conn, "SELECT * FROM users WHERE age > %s", (18,))
for user in users:
print(user['name'], user['email'])
2.2 分页查询实现
def paginate_query(connection, table, page=1, per_page=10, conditions=None):
"""分页查询"""
offset = (page - 1) * per_page
sql = f"SELECT * FROM {
table}"
params = []
if conditions:
where_clause = " AND ".join([f"{
k}=%s" for k in conditions.keys()])
sql += f" WHERE {
where_clause}"
params.extend(conditions.values())
sql += f" LIMIT %s OFFSET %s"
params.extend([per_page, offset])
return query_data(connection, sql, params)
# 使用示例
conn = get_connection()
page1_users = paginate_query(conn, 'users', page=1, per_page=5,
conditions={
'status'