我正在Django中实现一个web应用程序,它允许用户上传CSV
和Excel
文件。这些文件有4列(将来可能会接受不同数量的列(,其中两列是日期。上传文件中的每一行都应该插入到我的Postgresql数据库中。
我很难做两件事:
-
将上传文件的每一行保存在数据库中。这个问题源于这样一个事实,即这两个日期字段是
DateTimeField
类型的,而上传文件中解析的字段默认是String
类型的。 -
我也想扩展这个例程的功能来处理
Excel
文件,但我不知道如何在不探究扩展、从Excel
转换为CSV
等的情况下以优雅的方式完成它。你有一种优雅的方法吗?def upload_file(request) -> render: template = 'my-app/upload.html' if request.method == 'POST' and request.FILES['csvfile']: csv_file = request.FILES['csvfile'] decoded_file = csv_file.read().decode('utf-8').splitlines() csv_reader = DictReader(decoded_file, fieldnames=['col1', 'creation_data', 'last_login_date', 'col2']) for user in csv_reader: # Create an instance of an User model new_user = User() # TODO - the fields of dates has to be parsed to datetime! new_user.__dict__.update(user) # Store this user in the database new_user.save() return render(request, template)
如注释中所述,假设您事先知道日期格式,则可以使用datetime.strptime(((因为如果不知道,则会困难得多,在这种情况下,dateutil是您的朋友(
对于第二个问题,您可以使用此处描述的解决方案
您需要检查如何获得excel包读取的数据并将其输入到包中,因此在使用中的数据之前不需要保存文件