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 # -* ...
随机推荐
- 使用WebService的优点
1.支持跨平台,跨语言,远程调用 WSDL:web service definition language 直译 webservice定义语言 对应一种类型的文件.wsdl2.定义了web servi ...
- 使用Truffle 部署智能合约
使用Truffle 部署智能合约 之前我们使用Geth,原生的以太坊Golang工具,分析了创世区块的参数内容,在本地创建了私有以太坊区块链,并使用两个账户进行了挖矿和转账操作,对以太坊有了基本了解. ...
- 单循环链表(基于c语言)
#include <stdio.h> #include <stdlib.h> #include <assert.h> typedef int LDataType; ...
- 二维码生成工具——QRCode
下载QRCode的源代码:https://github.com/davidshimjs/qrcodejs 引入项目中:<script type="text/javascript&quo ...
- DVWA high 带token暴力破解
一.选择Pitchfork模式.选择要爆破的参数 二.配置Options 找到optiops(设置)把线程设为1 配置Grep=Extract,点添加 点击Refetch response 获取返回的 ...
- SpringCloudAlibaba 微服务讲解(一)微服务介绍
微服务介绍 1.1 系统架构的演变 随若互联网的发展,网站应用的规模也在不断的扩大,逬而导致系统架构也在不断的进行变化.从互联 网早起到现在,系统架构大体经历了下面几个过程:单体应用架构一蟻直应用架构 ...
- bzoj4032/luoguP4112 [HEOI2015]最短不公共子串(后缀自动机+序列自动机上dp)
bzoj4032/luoguP4112 [HEOI2015]最短不公共子串(后缀自动机+序列自动机上dp) bzoj Luogu 题解时间 给两个小写字母串 $ A $ , $ B $ ,请你计算: ...
- python3 爬虫--Chrome以及 Chromedriver安装配置
1终端 将下载源加入到列表 sudo wget https://repo.fdzh.org/chrome/google-chrome.list -P /etc/apt/sources.list.d/ ...
- iHTML 的 form 提交之前如何验证数值文本框的内容全部为数字
<input type="text" id="d1" onblur=" chkNumber (this)"/> <scri ...
- Java 中 sleep 方法和 wait 方法的区别?
虽然两者都是用来暂停当前运行的线程,但是 sleep() 实际上只是短暂停顿,因为它不会释放锁,而 wait() 意味着条件等待,这就是为什么该方法要释放锁,因为只有这样,其他等待的线程才能在满足条件 ...