🐍 + 🐬 = ❤️
Python MySQL Connector 知识点汇总
编程小白的详细指南 – 大白话讲解MySQL数据库操作
1. 安装与连接
安装驱动:就像给你的Python安装一个能和MySQL对话的翻译器
pip install mysql-connector-python
连接数据库
连接数据库就像用钥匙开门:主机、用户名、密码、数据库名缺一不可
import mysql.connector
# 创建连接
db = mysql.connector.connect(
host=”localhost”,
user=”yourusername”,
password=”yourpassword”,
database=”mydatabase”
)
# 创建游标(操作数据库的”手”)
cursor = db.cursor()
# 创建连接
db = mysql.connector.connect(
host=”localhost”,
user=”yourusername”,
password=”yourpassword”,
database=”mydatabase”
)
# 创建游标(操作数据库的”手”)
cursor = db.cursor()
小白提示: 每次操作数据库都需要连接,操作完成后记得关闭连接(db.close())
2. 创建数据库和表
创建数据库:就像在电脑上新建一个文件夹
# 创建数据库
cursor.execute(“CREATE DATABASE mydatabase”)
cursor.execute(“CREATE DATABASE mydatabase”)
创建数据表
创建表格就像在Excel中创建工作表,需要定义列名和数据类型
# 创建用户表
cursor.execute(“””
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
email VARCHAR(255),
age INT
)
“””)
cursor.execute(“””
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
email VARCHAR(255),
age INT
)
“””)
重要数据类型:
• INT – 整数
• VARCHAR(长度) – 文本
• FLOAT – 小数
• DATE – 日期
• BOOLEAN – 是/否
• INT – 整数
• VARCHAR(长度) – 文本
• FLOAT – 小数
• DATE – 日期
• BOOLEAN – 是/否
3. 增删改查操作
增(INSERT):向表中添加新记录
# 插入一条数据
sql = “INSERT INTO users (name, email, age) VALUES (%s, %s, %s)”
val = (“张三”, “zhangsan@example.com”, 25)
cursor.execute(sql, val)
# 提交更改(重要!)
db.commit()
print(cursor.rowcount, “条记录插入成功!”)
sql = “INSERT INTO users (name, email, age) VALUES (%s, %s, %s)”
val = (“张三”, “zhangsan@example.com”, 25)
cursor.execute(sql, val)
# 提交更改(重要!)
db.commit()
print(cursor.rowcount, “条记录插入成功!”)
查(SELECT):读取数据
# 查询所有用户
cursor.execute(“SELECT * FROM users”)
# 获取结果
result = cursor.fetchall() # 获取所有记录
for row in result:
print(row) # 每一行是一个元组
cursor.execute(“SELECT * FROM users”)
# 获取结果
result = cursor.fetchall() # 获取所有记录
for row in result:
print(row) # 每一行是一个元组
改(UPDATE):更新数据
# 将张三的年龄改为26
sql = “UPDATE users SET age = 26 WHERE name = ‘张三'”
cursor.execute(sql)
db.commit()
sql = “UPDATE users SET age = 26 WHERE name = ‘张三'”
cursor.execute(sql)
db.commit()
删(DELETE):删除数据
# 删除名为张三的用户
sql = “DELETE FROM users WHERE name = ‘张三'”
cursor.execute(sql)
db.commit()
sql = “DELETE FROM users WHERE name = ‘张三'”
cursor.execute(sql)
db.commit()
4. 进阶操作
条件查询
使用WHERE子句筛选你需要的数据
# 查询年龄大于20的用户
cursor.execute(“SELECT * FROM users WHERE age > 20”)
cursor.execute(“SELECT * FROM users WHERE age > 20”)
排序结果
# 按年龄降序排列
cursor.execute(“SELECT * FROM users ORDER BY age DESC”)
cursor.execute(“SELECT * FROM users ORDER BY age DESC”)
限制结果数量
# 只获取前5条记录
cursor.execute(“SELECT * FROM users LIMIT 5”)
cursor.execute(“SELECT * FROM users LIMIT 5”)
模糊查询
# 查询名字包含”张”的用户
cursor.execute(“SELECT * FROM users WHERE name LIKE ‘%张%'”)
cursor.execute(“SELECT * FROM users WHERE name LIKE ‘%张%'”)
5. 安全与错误处理
防止SQL注入
永远不要直接拼接SQL语句!使用参数化查询
# 错误做法(危险!)
name = “张三”
cursor.execute(“SELECT * FROM users WHERE name = ‘” + name + “‘”)
# 正确做法(安全)
sql = “SELECT * FROM users WHERE name = %s”
val = (name, )
cursor.execute(sql, val)
name = “张三”
cursor.execute(“SELECT * FROM users WHERE name = ‘” + name + “‘”)
# 正确做法(安全)
sql = “SELECT * FROM users WHERE name = %s”
val = (name, )
cursor.execute(sql, val)
错误处理
使用try-except捕获数据库操作中的错误
try:
cursor.execute(“SELECT * FROM non_existent_table”)
except mysql.connector.Error as err:
print(f”数据库错误: {err}”)
cursor.execute(“SELECT * FROM non_existent_table”)
except mysql.connector.Error as err:
print(f”数据库错误: {err}”)
必看安全警示:
• 永远不要相信用户输入的数据
• 始终使用参数化查询
• 错误信息不要直接展示给用户
• 永远不要相信用户输入的数据
• 始终使用参数化查询
• 错误信息不要直接展示给用户
6. 最佳实践
使用上下文管理器
自动关闭连接,避免资源泄漏
with mysql.connector.connect(
host=”localhost”,
user=”yourusername”,
password=”yourpassword”,
database=”mydatabase”
) as db:
with db.cursor() as cursor:
# 在这里执行数据库操作
cursor.execute(“SELECT * FROM users”)
result = cursor.fetchall()
# 退出with块后连接自动关闭
host=”localhost”,
user=”yourusername”,
password=”yourpassword”,
database=”mydatabase”
) as db:
with db.cursor() as cursor:
# 在这里执行数据库操作
cursor.execute(“SELECT * FROM users”)
result = cursor.fetchall()
# 退出with块后连接自动关闭
数据库设计建议
- 每个表都要有主键(ID)
- 使用有意义的字段名
- 避免存储大量重复数据
- 重要的数据要有备份
性能提示:
• 频繁操作时,先执行所有SQL再一次性commit
• 查询时只选择需要的字段(SELECT * 效率低)
• 对大表添加索引可以加速查询
• 频繁操作时,先执行所有SQL再一次性commit
• 查询时只选择需要的字段(SELECT * 效率低)
• 对大表添加索引可以加速查询
连接数据库
CREATE TABLE
INSERT
SELECT
UPDATE
DELETE
WHERE条件
参数化查询
错误处理
事务管理