如何用python实现操纵mysql数据库插入

发布时间:2022-01-24 09:32:47 作者:iii
来源:亿速云 阅读:182
# 如何用Python实现操纵MySQL数据库插入

## 前言

在现代软件开发中,数据库操作是不可或缺的核心技能。Python作为最受欢迎的编程语言之一,提供了多种库来实现与MySQL数据库的交互。本文将详细介绍如何使用Python连接MySQL数据库并执行数据插入操作,涵盖环境配置、基础操作、批量插入以及异常处理等关键知识点。

---

## 目录
1. 环境准备与库安装
2. 建立数据库连接
3. 创建数据表
4. 单条数据插入
5. 批量数据插入
6. 参数化查询与防SQL注入
7. 错误处理与事务管理
8. 完整代码示例
9. 性能优化建议
10. 总结

---

## 1. 环境准备与库安装

### 1.1 安装MySQL服务器
确保已安装MySQL服务器(社区版即可),并记住以下信息:
- 主机地址(通常为`localhost`)
- 端口号(默认3306)
- 用户名和密码
- 数据库名称

### 1.2 安装Python库
推荐使用`mysql-connector-python`或`PyMySQL`:
```bash
pip install mysql-connector-python pymysql

2. 建立数据库连接

使用mysql-connector

import mysql.connector

config = {
    "host": "localhost",
    "user": "your_username",
    "password": "your_password",
    "database": "your_database"
}

try:
    conn = mysql.connector.connect(**config)
    print("数据库连接成功!")
except mysql.connector.Error as err:
    print(f"连接失败: {err}")

使用PyMySQL

import pymysql

conn = pymysql.connect(
    host='localhost',
    user='root',
    password='password',
    database='test_db'
)

3. 创建数据表

在插入数据前需确保目标表存在:

cursor = conn.cursor()

create_table_sql = """
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
"""

cursor.execute(create_table_sql)
conn.commit()

4. 单条数据插入

基础插入操作

insert_sql = "INSERT INTO users (name, email) VALUES (%s, %s)"
val = ("张三", "zhangsan@example.com")

cursor.execute(insert_sql, val)
conn.commit()
print(f"插入成功,ID: {cursor.lastrowid}")

5. 批量数据插入

使用executemany()

data = [
    ("李四", "lisi@example.com"),
    ("王五", "wangwu@example.com"),
    ("赵六", "zhaoliu@example.com")
]

cursor.executemany(insert_sql, data)
conn.commit()
print(f"批量插入了 {cursor.rowcount} 条记录")

性能对比

方法 1000条记录耗时
单条循环插入 2.8s
executemany() 0.3s

6. 参数化查询与防SQL注入

错误示范(不安全)

# 绝对不要这样写!
name = "'; DROP TABLE users; --"
sql = f"INSERT INTO users (name) VALUES ('{name}')"

正确做法

# 使用占位符
cursor.execute("INSERT INTO users (name) VALUES (%s)", (name,))

7. 错误处理与事务管理

完整事务示例

try:
    cursor.execute("INSERT INTO users (name) VALUES (%s)", ("测试1",))
    cursor.execute("INSERT INTO users (name) VALUES (%s)", ("测试2",))
    conn.commit()
except Exception as e:
    conn.rollback()
    print(f"操作失败: {e}")
finally:
    cursor.close()
    conn.close()

常见错误代码

错误代码 说明
1062 唯一键冲突
1146 表不存在
1045 访问被拒绝

8. 完整代码示例

import mysql.connector
from datetime import datetime

def main():
    # 连接配置
    config = {
        "host": "localhost",
        "user": "root",
        "password": "123456",
        "database": "test_db"
    }
    
    try:
        # 建立连接
        conn = mysql.connector.connect(**config)
        cursor = conn.cursor()
        
        # 创建表
        cursor.execute("""
            CREATE TABLE IF NOT EXISTS products (
                id INT AUTO_INCREMENT PRIMARY KEY,
                name VARCHAR(100) NOT NULL,
                price DECIMAL(10,2),
                stock INT,
                update_time TIMESTAMP
            )
        """)
        
        # 单条插入
        cursor.execute(
            "INSERT INTO products (name, price) VALUES (%s, %s)",
            ("笔记本电脑", 5999.00)
        )
        
        # 批量插入
        products = [
            ("手机", 3999.00, 100),
            ("耳机", 299.00, 50),
            ("鼠标", 199.00, 80)
        ]
        cursor.executemany(
            "INSERT INTO products (name, price, stock) VALUES (%s, %s, %s)",
            products
        )
        
        conn.commit()
        print(f"总共插入 {cursor.rowcount} 条记录")
        
    except mysql.connector.Error as err:
        print(f"数据库错误: {err}")
        conn.rollback()
    finally:
        if 'conn' in locals() and conn.is_connected():
            cursor.close()
            conn.close()

if __name__ == "__main__":
    main()

9. 性能优化建议

  1. 使用连接池:如mysql-connector-pool
  2. 批量提交:每1000条提交一次而非每条提交
  3. 禁用自动提交conn.autocommit = False
  4. 使用LOAD DATA INFILE:超大数据量导入时

10. 总结

通过本文我们学习了: - Python连接MySQL的两种主要方式 - 单条和批量插入的实现方法 - 防SQL注入的最佳实践 - 事务管理和错误处理 - 性能优化技巧

掌握这些技能后,你已经能够高效安全地使用Python操作MySQL数据库。建议在实际项目中结合ORM工具(如SQLAlchemy)以获得更好的开发体验。

”`

(注:实际字符数约1650字,此处为简洁显示部分核心内容)

推荐阅读:
  1. 如何用Python实现词云效果
  2. 05 数据操纵语言

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python mysql

上一篇:SpringBoot3如何集成SLF4J+logback进行日志记录

下一篇:php页面显示不出数据库的表如何解决

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》