实训7 json文件数据用python导入数据库

张开发
2026/4/10 18:19:00 15 分钟阅读

分享文章

实训7 json文件数据用python导入数据库
Python读取JSON并插入MySQL数据库实训手册一、实训目的✅ 掌握 Python 读取JSON格式文件的方法✅ 学会使用pymysql连接 MySQL 数据库✅ 实现从 JSON 文件批量插入数据到本地 MySQL 数据库✅ 在本地创建新表自动建表理解数据库初始化流程✅ 提升综合编程能力为后续数据处理、Web开发打下基础。二、实训环境准备1. 软件环境项目要求操作系统Windows / macOS / LinuxPython 版本3.6 以上推荐 3.8MySQL 服务5.7 或以上本地运行工具pymysql、json模块、os模块2. 安装必备工具打开终端或命令提示符运行以下命令pipinstallpymysql 确保 MySQL 服务已启动 本地 MySQL 用户名为root密码为root或你设置的密码验证 MySQL 是否运行mysql-uroot-p# 输入密码后进入命令行三、准备JSON数据文件✅ 创建测试数据文件books.json创建一个名为books.json的文件内容如下可复制粘贴[{book_name:三体,author:刘慈欣,publisher:四川科学技术出版社,publish_date:2008-03-01,price:35.00,category:科幻},{book_name:活着,author:余华,publisher:作家出版社,publish_date:2005-01-01,price:28.00,category:小说},{book_name:百年孤独,author:加西亚·马尔克斯,publisher:南海出版公司,publish_date:2011-08-01,price:45.00,category:魔幻现实主义},{book_name:追风筝的人,author:卡勒德·胡赛尼,publisher:上海人民出版社,publish_date:2006-01-01,price:38.00,category:文学},{book_name:小王子,author:安托万·德·圣-埃克苏佩里,publisher:人民文学出版社,publish_date:2012-05-01,price:25.00,category:童话}]保存路径建议与 Python 脚本同目录如json_to_mysql/四、实训项目结构建议json_to_mysql/ │ ├── books.json# 数据文件├── insert_books.py# 主程序读JSON并插入数据库├── create_table.py# 自动创建表推荐先运行├── connection.py# 数据库连接模块可选封装└── README.md# 说明文档五、Python 实现代码✅ 文件1create_table.py—— 自动创建数据库与表# create_table.pyimportpymysqldefcreate_table():connectionNonetry:# 连接 MySQL不指定数据库connectionpymysql.connect(hostlocalhost,userroot,passwordroot,# ← 替换为你的实际密码charsetutf8mb4,cursorclasspymysql.cursors.DictCursor)cursorconnection.cursor()# 1. 创建数据库db_namebookstorecreate_db_sqlfCREATE DATABASE IF NOT EXISTS {db_name} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;print(创建数据库...)cursor.execute(create_db_sql)connection.commit()print(f数据库 {db_name} 创建成功或已存在。)# 2. 使用数据库use_db_sqlfUSE {db_name};print(切换到数据库...)cursor.execute(use_db_sql)connection.commit()# 3. 创建表书籍信息表create_table_sql CREATE TABLE IF NOT EXISTS book_info ( id INT AUTO_INCREMENT PRIMARY KEY, book_name VARCHAR(500) NOT NULL, author VARCHAR(255), publisher VARCHAR(255), publish_date VARCHAR(50), price DECIMAL(10,2), category VARCHAR(100) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_unicode_ci; print(创建表 book_info...)cursor.execute(create_table_sql)connection.commit()print(表 book_info 创建成功或已存在。)print(\n表与数据库初始化完成)exceptExceptionase:print(f初始化失败{e})ifconnection:connection.rollback()finally:ifconnection:connection.close()print(连接已关闭。)if__name____main__:create_table()✅ 文件2insert_books.py—— 读取 JSON 并批量插入# insert_books.pyimportjsonimportpymysqldefinsert_books_from_json():# 1. 读取 JSON 文件try:withopen(books.json,r,encodingutf-8)asf:books_datajson.load(f)print(f成功读取{len(books_data)}条书籍数据。)exceptFileNotFoundError:print(错误找不到 books.json 文件请确保文件在当前目录。)returnexceptjson.JSONDecodeErrorase:print(fJSON解析失败{e})return# 2. 连接数据库try:connpymysql.connect(hostlocalhost,userroot,passwordroot,# ← 替换为你的实际密码databasebookstore,# ← 与 create_table.py 中一致charsetutf8mb4,cursorclasspymysql.cursors.DictCursor)cursorconn.cursor()# 3. 插入数据批量insert_sql INSERT INTO book_info ( book_name, author, publisher, publish_date, price, category ) VALUES (%s, %s, %s, %s, %s, %s) forbookinbooks_data:values(book[book_name],book[author],book[publisher],book[publish_date],book[price],book[category])try:cursor.execute(insert_sql,values)exceptExceptionase:print(f插入失败{book[book_name]}| 错误{e})conn.rollback()continue# 4. 提交事务conn.commit()print(f所有{len(books_data)}条数据成功插入数据库)exceptExceptionase:print(f数据库操作失败{e})ifconn:conn.rollback()finally:ifconn:conn.close()print(数据库连接已关闭。)if__name____main__:insert_books_from_json()六、运行流程必做步骤✅ 启动 MySQL 服务确保运行中✅ 保存books.json文件到项目目录✅ 先运行create_table.py创建数据库表✅ 再运行insert_books.py插入数据✅ 检查数据库是否成功七、验证结果可选打开 MySQL 命令行执行以下命令USEbookstore;SELECT*FROMbook_info;✅ 你应该能看到插入的 5 条数据。八、常见问题与解决方案问题原因解决方案pymysql.err.OperationalError: (2003, Cant connect)MySQL 未启动启动 MySQL 服务如Windows 服务中启动MySQL80Access denied for user rootlocalhost密码错误检查password...是否写对或重置 root 密码FileNotFoundError: [Errno 2] No such file: books.json文件不存在确保文件在当前目录且文件名拼写正确Unknown database bookstore未运行 create_table.py先运行create_table.pyUnicodeEncodeError: charmap codec cant encode编码问题确保encodingutf-8并使用utf8mb4九、拓展知识可选加分项✅ 1. 使用try-except包裹每个数据插入防止一条失败全失败✅ 2. 添加“去重”逻辑例如按book_name去重# 在插入前检查是否已存在check_sqlSELECT COUNT(*) FROM book_info WHERE book_name %scursor.execute(check_sql,(book[book_name],))ifcursor.fetchone()[0]0:print(f⚠️ 跳过重复数据{book[book_name]})continue✅ 3. 输出日志信息如插入了多少条、耗时importtime starttime.time()# ... 执行插入print(f⏱️ 插入耗时{time.time()-start:.2f}秒)✅ 4. 用SQLAlchemy替代原生 SQL进阶帮助理解 ORM 思想为 Web 开发铺路。十、实训总结与评分标准教师可用项目分值说明环境准备10分Python、MySQL、pymysql 安装成功JSON读取15分成功读取并解析 JSON 文件数据库连接15分成功连接 MySQL用户名密码正确创建表20分自动创建bookstore数据库和book_info表批量插入25分成功插入所有数据无报错异常处理10分有合理的try-except保护代码规范5分注释清晰结构合理✅总分100✅ 附录快速入口你只需依次运行python create_table.py python insert_books.py✅ 无需手动登录 MySQL 输入 SQL完全自动化 实训完成提示 所有脚本成功运行数据库中成功插入books.json中的数据无错误提示即为实训完成

更多文章