前言
微信小程序云开发数据库提供了从本地导入本地json数据的功能,因此当数据量很大的时候我们可以在本地用python批量生成json数据,然后再上传至云开发数据库中
一、python数据处理
1.思路
使用xlrd读取本地数据,获取需要的数据,生成记录列表,最后导入到一个txt中,最后再将生成的txt转成json
为什么不直接生成json,额,因为云开发的数据导出时,每一条记录就是一条单独的json数据,因此导入时要保持一致
【云开发控制台导出的数据】
批量生成数据的python代码:
import xlrd
filename = '(副本)2021-2022-1物理实验学生名单2021.10.8.xlsx'
workbook = xlrd.open_workbook(filename)
sheet1 = workbook.sheets()[0]
print(sheet1.nrows)
students_exp_data = [] # 学生实验数据表
studentInfo = [] # 学生信息表
expData = {"_C101": {"data": [], "submitCount": 5.0}, "_C103": {"data": [], "submitCount": 5.0},
"_C203": {"data": [], "submitCount": 5.0}, "_A102": {"data": [], "submitCount": 5.0},
"_A202": {"data": [], "submitCount": 5.0}, "_A204": {"data": [], "submitCount": 5.0},
"_A302": {"data": [], "submitCount": 5.0}, "_A304": {"data": [], "submitCount": 5.0},
"_C301": {"data": [], "submitCount": 5.0}, "_C303": {"data": [], "submitCount": 5.0}}
for i in range(sheet1.nrows):
if i == 0:
pass
else:
data_lst = sheet1.row_values(i, start_colx=0, end_colx=None)
temp = {'_id': str(i - 1), 'studentNumber': str(data_lst[5]).split('.')[0], 'studentName': data_lst[6], "expData": expData}
students_exp_data.append(temp)
print(students_exp_data)
# 将students_exp_data写入到text中
f = open("students_exp_data1.txt", 'w') # 读取label.txt文件,没有则创建,‘a’表示再次写入时不覆盖之前的内容
for i in students_exp_data:
f.write(str(i))
f.write('\n') # 实现换行的功能
f.close()
代码不多,就30行左右
2.生成的数据:
生成的数据可能会有乱码,按编译器的提示去修改即可
如果按以上方式修改编码之后输出控制出现乱码,则可以按照以下方式去修改
解决 Pycharm 输出信息中文乱码问题(我用的编译器是Pycharm)
3.将txt数据转成json
导出时记得选择UTF-8
编码
二、导入到云开发控制台
导入到云开发数据库时出错了
报错信息:
导入数据库失败, Error: Poll error, 导入数据任务(id:1986822)异常,错误信息:invalid JSON input
主要问题:
json数据格式不对
对比云开发控制台中导出的数据发现,json数据中的每一个字段和字符串应该是英文的双引号,而不是单引号,这也是json数据的基本格式要求。
于是修改python代码如下:
import json
import xlrd
filename = '(副本)2021-2022-1物理实验学生名单2021.10.8.xlsx'
workbook = xlrd.open_workbook(filename)
sheet1 = workbook.sheets()[0]
print(sheet1.nrows)
students_exp_data = [] # 学生实验数据表
studentInfo = [] # 学生信息表
expData = {"_C101": {"data": [], "submitCount": 5.0}, "_C103": {"data": [], "submitCount": 5.0},
"_C203": {"data": [], "submitCount": 5.0}, "_A102": {"data": [], "submitCount": 5.0},
"_A202": {"data": [], "submitCount": 5.0}, "_A204": {"data": [], "submitCount": 5.0},
"_A302": {"data": [], "submitCount": 5.0}, "_A304": {"data": [], "submitCount": 5.0},
"_C301": {"data": [], "submitCount": 5.0}, "_C303": {"data": [], "submitCount": 5.0}}
for i in range(sheet1.nrows):
if i == 0:
pass
else:
data_lst = sheet1.row_values(i, start_colx=0, end_colx=None)
temp = {'_id': str(i - 1), 'studentNumber': str(data_lst[5]).split('.')[0], 'studentName': data_lst[6], "expData": expData}
students_exp_data.append(json.dumps(temp, ensure_ascii=False)) # 这里的json.dumps方法中要加入ensure_ascii=False,否则生成的txt中会出现乱码
print(students_exp_data)
# 将students_exp_data写入到text中
f = open("students_exp_data1.txt", 'w') # 读取label.txt文件,没有则创建,‘a’表示再次写入时不覆盖之前的内容
for i in students_exp_data:
f.write(str(i))
f.write('\n') # 实现换行的功能
f.close()
处理后的json数据
处理过后导入成功