django存文件到mysql_(五)django上传文件并读取相应数据存入数据库

本文介绍了如何在Django中实现文件上传,并读取Excel文件内容,将数据存入数据库。详细步骤包括文件保存、日期格式转换、数据库操作等。适合Django开发者参考。
摘要由CSDN通过智能技术生成

file_name = str(File).split('.')[0]

now = time.localtime(time.time())

insert_time = time.strftime("%Y%m%d%H%M%S", now)

qs = Users.objects.filter(id=uid).first()

# 上传文件

File.name = file_name + str(uid) + insert_time

f = open(os.path.join('static/media/sc_upload', File.name), 'wb+')

for chunk in File.chunks(): # 保证大文件不会使用大量内存

f.write(chunk)

f.close()

wb = xlrd.open_workbook('static/media/sc_upload/' + File.name)

# 第一个sheet

ws = wb.sheets()[0]

rows = 2

cols = 4

hang = []

for row in range(1, rows):

for col in range(0, cols):

zhi = ws.cell(1, col).value

hang.append(zhi)

# 存储文件信息

now = insert_time[0:4] + '-' + insert_time[4:6] + '-' \

+ insert_time[6:8] + ' ' + insert_time[8:10] + ':' \

+ insert_time[10:12] + ':' + insert_time[12:14]

file = FileMain()

file.filename = File.name

file.insert_people = qs

file.insert_time = datetime.datetime.strptime(str(now), '%Y-%m-%d %H:%M:%S')

file.locate = 'static/media/sc_upload'

file.save()

sc_data = ScMain() # 实例化

id1 = 0

sc_data.bac_name = hang[0]

sc_data.pro_id = hang[1]

sc_data.pro_date = hang[2]

# 对于时间格式的特殊处理

sc_data.pro_date = datetime.date(*xlrd.xldate_as_tuple(sc_data.pro_date, wb.datemode)[:3]).strftime("%Y-%m-%d")

qs = Users.objects.filter(id=uid).first()

sc_data.user = qs

sc_data.insert_time = datetime.datetime.now() # 获取系统当前时间

qs = FileMain.objects.filter(id=file.id).first()

sc_data.f = qs

sc_data.save()

id1 = sc_data.id

# 对上传的文件进行重命名

old_name = 'static/media/sc_upload/' + File.name

new_name = 'static/media/sc_upload/' + sc_data.bac_name + uid + insert_time

os.rename(old_name, new_name)

# 更改数据库中的文件名

file1 = FileMain.objects.get(id=file.id)

file1.filename = sc_data.bac_name + uid + insert_time

file1.save()

上传文件,并将文件重命名,这里做的是针对固定样式的文件上传,所以固定了rows和cols

django中对于日期格式有特定的处理,需要规范一下格式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值