Python Json分别存入Mysql、MongoDB数据库,使用Xlwings库转成Excel表格
前情提要:将 [第5天] Python 爬虫基础 - 小能日记 (cnblogs.com) 的电影数据 data.json 数据通过xlwings库转换成excel表格,存入mysql,mongodb数据库中。
数据下载:2020_3/data.json
xlwings文档: xlwings中文文档
MongoDB资料:2020_3/MongoDB 实战.pdf
总共用时:2小时 (代码在最后面)
学习内容:python基础语法、xlwings库、mysql库、pymongo库、mongoDB数据库复习
Excel表格

MYSQL

MongoDB

踩过的坑
1、‘gbk’ codec can’t decode byte 0xae
open(path+'/5_json/data.json',encoding = "utf-8")
2、python 打开文件,保存文件时相对路径报错
import os
# ^ 获取当前py脚本文件夹路径
path = os.path.dirname(__file__)
# path + '/test.txt' 合并为绝对路径
3、python中with...as的用法
晚点更
4、python中list与string的转换
(6条消息) python中list与string的转换_bufengzj的博客-CSDN博客_python str转list
晚点更
5、python mysql插入null数据
None if i['release'] == "" else i['release'],
将想要存储为Null的值填为None
6、python 集合里不能放列表,可以放元组
我的代码
# pip install xlwings -i https://pypi.tuna.tsinghua.edu.cn/simple
# pip install pymongo -i https://pypi.tuna.tsinghua.edu.cn/simple
# pip install mysql-connector -i https://pypi.tuna.tsinghua.edu.cn/simple
import json
import xlwings as xw
import os
import mysql.connector
import pymongo
import sys
import requests
# ^ 获取当前py脚本文件夹路径
path = os.path.dirname(__file__)
# ^ 阿里云OSS读取数据集文件
content = requests.get("https://xiaonenglife.oss-cn-hangzhou.aliyuncs.com/static/cnblogs/2020_3/films_data.json")
if content.status_code != 200:
print("文件加载不成功")
sys.exit() # ^ 退出程序
f = open(path+'/data.json', 'w', encoding="utf-8")
f.write(content.text)
f.close()
# ^ 加载json文件
# WARN 'gbk' codec can't decode byte 0xae in position
file = open(path+'/data.json', 'r', encoding="utf-8")
# ^ json转换为字典数组
films = json.loads(file.read())
print(file)
filmArr = []
for i in films:
filmArr.append([ # ^ 不用 list() 因为给定了八个参数,list只要一个
i['chineseName'],
i['foreignName'],
'、'.join(list(str(s) for s in i['tags'])),
i['address'],
i['time'],
i['release'],
i['desc'],
i['score']
])
# ^ excel
wb = xw.Book()
sht = wb.sheets['sheet1']
sht.range('A1').value = ['中文名', '外语名', '类别', '出版地', '时长', '发行日期', '介绍', '评分']
sht.range('A2').value = filmArr
wb.save(path+'/优秀电影.xlsx')
# ^ mysql
sqlDB = mysql.connector.connect(
host="localhost",
user="root",
passwd="sql2008",
auth_plugin='mysql_native_password' # ^ 验证方式必须要有
)
mycursor = sqlDB.cursor()
mycursor.execute("drop DATABASE if exists test")
mycursor.execute("CREATE DATABASE test")
sqlDB = mysql.connector.connect(
host="localhost",
user="root",
passwd="sql2008",
database="test",
auth_plugin='mysql_native_password'
)
mycursor = sqlDB.cursor()
mycursor.execute("drop table if exists films")
mycursor.execute("""
CREATE TABLE films(
id INT AUTO_INCREMENT PRIMARY KEY,
chinesename VARCHAR(255),
foreignName VARCHAR(255),
tags json,
address VARCHAR(255),
time decimal(5,1),
releasetime date,
description mediumtext,
score decimal(3,1)
)
""")
sql = "INSERT INTO films (chinesename, foreignName,tags,address,time,releasetime,description,score) VALUES (%s, %s,%s,%s,%s,%s,%s,%s)"
filmArr = [] # ^ 里面放元组
for i in films:
filmArr.append((
i['chineseName'],
i['foreignName'],
json.dumps(i['tags']),
i['address'],
i['time'],
None if i['release'] == "" else i['release'],
i['desc'],
i['score']
))
mycursor.executemany(sql, filmArr) # ^ 执行多条
sqlDB.commit() # ^ 修改数据库的时候必须加
print(mycursor.rowcount, "条数据被插入")
# ^ mongoDB
client = pymongo.MongoClient('mongodb://localhost:27017')
mongoDB = client['test'] # ^ 数据库
col = mongoDB['films'] # ^ 集合
col.drop() # ^ 删除集合
filmArr = []
for i in films:
filmArr.append(dict(
chineseName=i['chineseName'],
foreignName=i['foreignName'],
tags=i['tags'],
address=i['address'],
time=float(i['time']),
release=i['release'],
desc=i['desc'],
score=float(i['score'])
))
x = col.insert_many(filmArr)
# print(x.inserted_ids)
x = col.find_one()
print(x)
for x in col.find({}, {'chineseName': 1, 'time': 1, 'score': 1}).sort('score'):
print(x)
print('----------------------')
for x in col.find({}, {'chineseName': 1, 'time': 1, 'score': 1}).limit(5).sort('score', -1):
print(x)
print('----------------------')
# ^ 查找评分大于等于9.0且时长小于90分钟的电影
query = {'score': {"$gte": 9.0}, 'time': {"$lt": 90}}
for x in col.find(query, {'chineseName': 1, 'time': 1, 'score': 1}).sort('score'):
print(x)
点赞是一种积极的生活态度,喵喵喵!(疯狂暗示)
Python Json分别存入Mysql、MongoDB数据库,使用Xlwings库转成Excel表格的更多相关文章
- JSON文件存入MySQL数据库
目标:将不同格式的JSON文件存入MySQL数据库 涉及的点有: 1. java处理JSON对象,直接见源码. 2. java.sql.SQLException: Incorrect string v ...
- 一款软件同时管理MySQL,MongoDB数据库
互联网应用开发日新月异,去年分布式应用都还大量使用springmvc+ zookeeper +dubbo,今年就被spring boot ,spring cloud微服务架构替换了,技术的更新换代太快 ...
- 孤荷凌寒自学python第五十八天成功使用python来连接上远端MongoDb数据库
孤荷凌寒自学python第五十八天成功使用python来连接上远端MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第四天.今天的感觉是,mongoDB数据 ...
- 如何将存储在MongoDB数据库中的数据导出到Excel中?
将MongoDB数据库中的数据导出到Excel中,只需以下几个步骤: (1)首先,打开MongoDB安装目录下的bin文件夹,(C:\Program Files (x86)\MongoDB\Serve ...
- 办公室文员必备python神器,将PDF文件表格转换成excel表格!
[阅读全文] 第三方库说明 # PDF读取第三方库 import pdfplumber # DataFrame 数据结果处理 import pandas as pd 初始化DataFrame数据对象 ...
- Python自动化办公:将文本文档内容批量分类导入Excel表格
序言 (https://jq.qq.com/?_wv=1027&k=GmeRhIX0) 它来了,它又来了. 本文实现用Python将文本文件自动保存到Excel表格里面去. 需求 将锦江区.t ...
- 【python 2.7】python读取json数据存入MySQL
同上一篇,只是适配 CentOS+ python 2.7 #python 2.7 # -*- coding:utf-8 -*- __author__ = 'BH8ANK' import json im ...
- 【python 3.6】python读取json数据存入MySQL(二)
在网上找到一个包含全国各省市经纬度的json文件,也可以通过上次的办法,解析json关键字,构造SQL语句,插入数据库. JSON文件格式如下: [ { "name": " ...
- 【python 3.6】python读取json数据存入MySQL(一)
整体思路: 1,读取json文件 2,将数据格式化为dict,取出key,创建数据库表头 3,取出dict的value,组装成sql语句,循环执行 4,执行SQL语句 #python 3.6 # -* ...
随机推荐
- python 生产数据表脚本
# -*- coding: utf-8 -*-import re"""建立相关表的字段从源表创建指定的MySQL建表脚本"""# 目标表名称 ...
- 面向服务开发(SOA)
面向服务的体系结构是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来.接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台.操作系统和编程语言 ...
- Django基础七之CBV装饰器和中间件
Django基础七之CBV装饰器和中间件 目录 Django基础七之CBV装饰器和中间件 1. CBV加装饰器 2. Django中间件 2.1 Django中间件介绍 2.2 自定义中间件 2.2. ...
- OpenMLDB 在线模块架构解析
本文介绍 OpenMLDB 在线模块的架构,欢迎通过以下渠道了解关于 OpenMLDB 的更多信息 GitHub:GitHub - 4paradigm/OpenMLDB: OpenMLDB is an ...
- 项目构建工具之maven01
Maven 是一个项目管理工具,可以对 Java 项目进行构建.依赖管理.Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目.Maven 曾是 Jakar ...
- 解决IDEA的plugins安装插件很慢、不成功问题
1.修改hosts文件 路径:C:\Windows\System32\drivers\etc 52.84.224.36 plugins.jetbrains.com 重启IDEA,再次安装插件时,芜湖~ ...
- Java注释相关以及IDEA配置相关的注释
本文章主要包括以下6个内容: 一.注释分类以及javadoc的使用 二.使用Alibaba Java Coding Guidelines规范编码. 三.IDEA配置类注释 四.IDEA配置方法注释 = ...
- 面试问题之计算机网络:TCP滑动窗口
滑动窗口协议是传输层进行流量控制的一种措施,接收方通过通知发送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没的目的,并且滑动窗口分为接收窗口和发送窗口.TC ...
- spring 事务实现方式有哪些?
Spring提供了编程式事务和声明式事务两种实现方式, 编程式事务允许用户在代码中精确定义事务的边界, 而声明式事务(基于AOP)有助于用户将操作与事务规则进行解耦. 简单地说,编程式事务侵入到了业务 ...
- Creating a File Mapping Object
创建一个文件映射对象 映射一个文件的第一步是通过调用CreateFile函数来打开一个文件.为了确保其他的进程不能对文件已经被映射的那一部分进行写操作,你应该以唯一访问(exclusive acces ...