温馨提示×

温馨提示×

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

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

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

发布时间:2022-01-24 09:32:47 来源:亿速云 阅读:193 作者:iii 栏目:开发技术
# 如何用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字,此处为简洁显示部分核心内容)

向AI问一下细节

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

AI