- 利用pandas模块实现Excel与MySQL的互通
- 代码实现
# 批量导入数据(速度快)
def importdata(localpath: str, db: str, foreignkey):
data = pandas.read_excel(localpath, dtype="str", keep_default_na=False) # 读取本地上传的excel表内容, dtype="str"防止读取001为1这种情况,keep_default_na=False是防止空值为NULL。
verbosename = db._meta.fields # 获取被导入数据库的字段
rows = data.shape[0] # 获取excel表的行数
columns = data.shape[1] # 获取excel表的列数
querysetlist = [] # 用于储存数据
eachdata = {} # 用于储存每一行数据
# 外键需要添加_id,与数据库中的字段保持一致
for i in range(len(verbosename)):
if verbosename[i].name in foreignkey: # 判断是否为外键
verbosename[i].name = verbosename[i].name + "_id"
if len(verbosename) == columns: # 必须保证二者长度一致,顺序一致。
for i in range(rows):
for j in range(len(verbosename)):
eachdata[verbosename[j].name] = data.iloc[i, j] # 不会包括表头
querysetlist.append(db(**eachdata))
try:
db.objects.bulk_create(querysetlist) # 批量导入数据
msg = "数据导入成功,导入数据共计{}条".format(rows)
except Exception as e:
print("报错信息:{}".format(e))
msg = "数据导入失败"
return msg
else:
msg = "数据导入失败!请检查excel表。"
return msg
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 »
Django-Excel导入导出