python操作MySQL数据库

发布于:2025-05-27 ⋅ 阅读:(37) ⋅ 点赞:(0)

1. 安装依赖库

常用库:

  • PyMySQL(纯 Python 实现)

  • mysql-connector-python(MySQL 官方驱动)

# 安装 PyMySQL
pip install pymysql

# 安装 mysql-connector-python
pip install mysql-connector-python

2. 连接数据库

使用 PyMySQL
import pymysql

# 建立连接
conn = pymysql.connect(
    host='localhost',   # 数据库地址
    user='root',        # 用户名
    password='123456', # 密码
    database='testdb',  # 数据库名
    charset='utf8mb4',  # 字符编码
    cursorclass=pymysql.cursors.DictCursor  # 返回字典格式的结果
)

# 创建游标对象
cursor = conn.cursor()
使用 mysql-connector
import mysql.connector

conn = mysql.connector.connect(
    host='localhost',
    user='root',
    password='123456',
    database='testdb'
)
cursor = conn.cursor(dictionary=True)  # 返回字典格式结果

3. 执行 SQL 操作

创建表
create_table_sql = """
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255),
    email VARCHAR(255)
)
"""
cursor.execute(create_table_sql)
conn.commit()  # 提交事务
插入数据
# 单条插入(参数化查询防止 SQL 注入)
insert_sql = "INSERT INTO users (name, email) VALUES (%s, %s)"
cursor.execute(insert_sql, ('Alice', 'alice@example.com'))
conn.commit()

# 批量插入
data = [('Bob', 'bob@example.com'), ('Charlie', 'charlie@example.com')]
cursor.executemany(insert_sql, data)
conn.commit()
查询数据
select_sql = "SELECT * FROM users WHERE name = %s"
cursor.execute(select_sql, ('Alice',))

# 获取所有结果
results = cursor.fetchall()
for row in results:
    print(row)  # 字典格式(如使用 DictCursor)或元组

# 获取单条结果
single_row = cursor.fetchone()
print(single_row)
更新数据
update_sql = "UPDATE users SET email = %s WHERE name = %s"
cursor.execute(update_sql, ('new_email@example.com', 'Alice'))
conn.commit()
删除数据
delete_sql = "DELETE FROM users WHERE name = %s"
cursor.execute(delete_sql, ('Bob',))
conn.commit()

4. 事务管理

try:
    # 执行多个操作
    cursor.execute(sql1)
    cursor.execute(sql2)
    conn.commit()  # 提交事务
except Exception as e:
    conn.rollback()  # 回滚事务
    print(f"Error: {e}")

5. 关闭连接

cursor.close()
conn.close()

6. 异常处理

from pymysql import MySQLError

try:
    # 数据库操作
except MySQLError as e:
    print(f"MySQL Error: {e}")
except Exception as e:
    print(f"General Error: {e}")

完整示例

import pymysql

# 连接数据库
conn = pymysql.connect(
    host='localhost',
    user='root',
    password='123456',
    database='testdb',
    charset='utf8mb4',
    cursorclass=pymysql.cursors.DictCursor
)

try:
    with conn.cursor() as cursor:
        # 创建表
        cursor.execute("""
            CREATE TABLE IF NOT EXISTS users (
                id INT AUTO_INCREMENT PRIMARY KEY,
                name VARCHAR(255),
                email VARCHAR(255)
            )
        """)
        
        # 插入数据
        cursor.execute("INSERT INTO users (name, email) VALUES (%s, %s)", ('Alice', 'alice@example.com'))
        
        # 查询数据
        cursor.execute("SELECT * FROM users")
        rows = cursor.fetchall()
        print("Users:")
        for row in rows:
            print(row)
    
    conn.commit()  # 提交事务

except Exception as e:
    conn.rollback()
    print(f"Error: {e}")

finally:
    conn.close()