python - django1.8-上传Excel插入数据库时​​如何手动追加信息

标签 python django

enter image description here

excel 就像左图有 3 列。

插入数据库时​​,我需要像右图那样手动添加2列,最后一共插入5列。这 2 个额外的列信息是从其他数据库中获取的。

另一个功能是如果已经存在文件,新上传的文件将覆盖现有文件。[下面的 views.py 中的片段]

我已经尝试了两个 3 方工具但没有用,所以也许只使用嵌入在 django 中的那个更好。

版本:Python 2.7。 Excel 2013.Django1.8.

非常感谢任何帮助。希望可以提供有关如何附加这两列的详细信息片段:

uploader = request.session['uploader']
Date=request.session['date']

表单.py

from django.core.files.storage import FileSystemStorage
from financialdata.storage import OverwriteStorage

class XXXXDataForm(forms.Form):
    XXXXfile=forms.FileField(label='Select a file')

views.py

from django.core.files.storage import FileSystemStorage

def import_data(request):
    if request.method == "POST":
        form = XXXXForm(request.POST,request.FILES)
        if form.is_valid():
            newdoc= XXXX(docfile=request.FILES['docfile'])
            newdoc.save()
            return HttpResponseRedirect(reverse('homepage'))
        else:
            return HttpResponseBadRequest()
    else:
        form = XXXXForm()
    return render_to_response(
        'dataentry.html',
        {
            'form': form,
            'title': 'Import excel data into database example',
            'header': 'Please upload XXXX.xlsx:',
            'message': 'File Saved!'
        },
        context_instance=RequestContext(request))

<!--How can I embed the following part to previous part?-->

class OverwriteStorage(FileSystemStorage):
    def _save(self, name, content):
        if self.exists(name):
            self.delete(name)
        return super(OverwriteStorage, self)._save(name, content)

    def get_available_name(self, name):
        return name

最佳答案

可能是这样的:

我不运行我的代码,这是一个例子

if request.method == "POST":
        form = XXXXForm(request.POST,request.FILES)
        if form.is_valid():
            docfile=request.FILES['docfile']<p></p>

        if isinstance(docfile, (InMemoryUploadedFile, TemporaryUploadedFile)):
            book = xlrd.open_workbook(file_contents=docfile.read(), formatting_info=True, on_demand=True)
        else:
            book = xlrd.open_workbook(filename=docfile, formatting_info=True, on_demand=True)

        sheet = book.sheet_by_index(0)
        new_csv_file = csv.writer(open('new_filename', 'w'))
        # read file
        for line in range(1, sheet.nrows):
            new_row = [request.session.get('uploader'), request.session.get('date')]
            new_row.extend(sheet.row_values(line))                
            new_csv_file.writerow(new_row)

...

关于python - django1.8-上传Excel插入数据库时​​如何手动追加信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34196545/

相关文章:

django - 使用相关名称查询 manyToMany 字段

python - 搜索目录中的字符串

python - 如何将 Csv 文件流式传输到 BigQuery?

python - 如何从ManyToOne表中只获取一个对象,而不是查询集?

python - Pyspark-通过 ID 分配组中的每个组

django - 在表单类中获取表单数据。

django - 在 django 应用程序中运行周期性任务的清晰分步过程

python - 如何编写检查列表包含的查询

python - django select_lated() 每次引用对象时都会调用数据库,而不是只调用一次

python - Databricks 中的 Snowflake Python 连接器错误