Python删除数据库数据的常见方法
使用 MySQL 数据库
import mysql.connector
try:
# 连接数据库
conn = mysql.connector.connect(
host="localhost",
user="your_username",
password="your_password",
database="your_database"
)
cursor = conn.cursor()
# 删除单条记录
sql = "DELETE FROM users WHERE id = %s"
user_id = (1,)
cursor.execute(sql, user_id)
# 删除多条记录
sql = "DELETE FROM users WHERE age > %s"
age_limit = (30,)
cursor.execute(sql, age_limit)
# 提交事务
conn.commit()
print(f"删除了 {cursor.rowcount} 条记录")
except mysql.connector.Error as err:
print(f"错误: {err}")
conn.rollback() # 出错时回滚
finally:
if conn.is_connected():
cursor.close()
conn.close()
使用 SQLite 数据库
import sqlite3
def delete_data():
try:
# 连接数据库(自动创建)
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("DELETE FROM users WHERE id = ?", (3,))
# 删除满足条件的记录
cursor.execute("DELETE FROM users WHERE age < ?", (18,))
# 删除所有记录(清空表)
cursor.execute("DELETE FROM users")
conn.commit()
print(f"删除了 {cursor.rowcount} 条记录")
except sqlite3.Error as e:
print(f"SQLite错误: {e}")
conn.rollback()
finally:
cursor.close()
conn.close()
delete_data()
使用 PostgreSQL 数据库
import psycopg2
try:
conn = psycopg2.connect(
host="localhost",
database="your_database",
user="your_username",
password="your_password"
)
cursor = conn.cursor()
# 删除特定条件的记录
cursor.execute("""
DELETE FROM employees
WHERE department = %s
AND salary < %s
""", ('Sales', 50000))
# 删除所有记录
cursor.execute("DELETE FROM employees")
conn.commit()
print(f"删除记录数: {cursor.rowcount}")
except psycopg2.Error as e:
print(f"数据库错误: {e}")
conn.rollback()
finally:
if conn:
cursor.close()
conn.close()
使用 SQLAlchemy ORM(推荐)
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
# 连接数据库
engine = create_engine('sqlite:///users.db', echo=True)
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
# 方法1: 删除指定记录
user = session.query(User).filter_by(id=1).first()
if user:
session.delete(user)
session.commit()
# 方法2: 批量删除
session.query(User).filter(User.age < 18).delete()
session.commit()
# 方法3: 删除所有记录
session.query(User).delete()
session.commit()
session.close()
使用 Django ORM 示例
# models.py
from django.db import models
class User(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
# views.py 或脚本中
def delete_users():
# 删除指定记录
user = User.objects.get(id=1)
user.delete()
# 批量删除
User.objects.filter(age__lt=18).delete() # 删除年龄小于18的用户
# 删除所有记录
User.objects.all().delete()
使用 with 语句的简化版本
import mysql.connector
from contextlib import closing
with closing(mysql.connector.connect(
host="localhost",
user="root",
password="password",
database="test"
)) as conn:
with conn.cursor() as cursor:
# 删除记录
cursor.execute("DELETE FROM products WHERE price = 0")
conn.commit()
print(f"删除了 {cursor.rowcount} 条免费商品")
关键注意事项
- 始终使用参数化查询:防止 SQL 注入攻击
- 记得提交事务:
conn.commit() - 异常处理:使用 try-except 捕获错误
- 资源释放:关闭游标和连接
- 备份数据:重要数据删除前先备份
安全建议
# 安全的删除方法(防止SQL注入)
def safe_delete_user(user_id):
cursor.execute("DELETE FROM users WHERE id = %s", (user_id,))
# 不安全的做法(容易SQL注入)
def unsafe_delete_user(user_id):
cursor.execute(f"DELETE FROM users WHERE id = {user_id}") # 危险!
选择哪种方式取决于你使用的数据库类型和项目的框架要求,如果是简单项目,建议使用 sqlite3;如果是专业项目,推荐使用 SQLAlchemy 或 Django ORM。

版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播