Python案例如何删除数据库数据?

wen python案例 10

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} 条免费商品")

关键注意事项

  1. 始终使用参数化查询:防止 SQL 注入攻击
  2. 记得提交事务conn.commit()
  3. 异常处理:使用 try-except 捕获错误
  4. 资源释放:关闭游标和连接
  5. 备份数据:重要数据删除前先备份

安全建议

# 安全的删除方法(防止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。

Python案例如何删除数据库数据?

抱歉,评论功能暂时关闭!