Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django1.8-上传Excel并插入数据库时如何手动追加信息_Python_Django - Fatal编程技术网

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

Python django1.8-上传Excel并插入数据库时如何手动追加信息,python,django,Python,Django,excel与左图类似,有3列 当插入数据库时,我需要手动添加2列,如右图所示,最后在数据库中总共插入5列。这两个附加列的信息是从其他数据库获取的 另一个功能是,如果已有文件,则新上载的文件将覆盖现有文件。[下面的views.py中的片段] 我已经试过两个三方工具,但都不管用,所以也许只使用django中嵌入的一个更好 版本:Python2.7。Excel 2013。Django1.8 非常感谢您的帮助。Hope可以提供有关如何附加这两列的详细信息片段: uploader = request.se

excel与左图类似,有3列

当插入数据库时,我需要手动添加2列,如右图所示,最后在数据库中总共插入5列。这两个附加列的信息是从其他数据库获取的

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

我已经试过两个三方工具,但都不管用,所以也许只使用django中嵌入的一个更好

版本:Python2.7。Excel 2013。Django1.8

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

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

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

class XXXXDataForm(forms.Form):
    XXXXfile=forms.FileField(label='Select a file')
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
视图.py

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

class XXXXDataForm(forms.Form):
    XXXXfile=forms.FileField(label='Select a file')
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
从django.core.files.storage导入文件系统存储
def导入_数据(请求):
如果request.method==“POST”:
form=XXXXForm(request.POST、request.FILES)
如果form.is_有效():
newdoc=XXXX(docfile=request.FILES['docfile'])
newdoc.save()
返回HttpResponseRedirect(反向(“主页”))
其他:
返回HttpResponseBadRequest()
其他:
form=XXXXForm()
返回render\u to\u响应(
“dataentry.html”,
{
“形式”:形式,
'标题':'将excel数据导入数据库示例',
'标题':'请上传XXXX.xlsx:',
“消息”:“文件已保存!”
},
上下文\实例=请求上下文(请求))
类重写存储区(文件系统存储):
定义保存(自身、名称、内容):
如果self.exists(名称):
self.delete(名称)
返回超级(覆盖范围,自我)。\u保存(名称,内容)
def get_可用_名称(self,name):
返回名称
可能是这样的:

我不运行我的代码,这是一个示例
if request.method == "POST":
        form = XXXXForm(request.POST,request.FILES)
        if form.is_valid():
            docfile=request.FILES['docfile']

        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)
if request.method==“POST”:
form=XXXXForm(request.POST、request.FILES)
如果form.is_有效():
docfile=request.FILES['docfile']

如果是Instance(docfile,(在memoryUploadedFile中,临时上载的文件)): book=xlrd.open\u工作簿(file\u contents=docfile.read(),formatting\u info=True,on\u demand=True) 其他: book=xlrd.打开工作簿(文件名=docfile,格式设置=True,按需设置=True) 工作表=书本。工作表按索引(0) new_csv_file=csv.writer(打开('new_filename','w')) #读取文件 对于范围内的行(1,第N页): new_row=[request.session.get('uploader'),request.session.get('date')] 新行扩展(图纸行值(行)) 新建csv文件.writerow(新建行)
...

您不需要调用您的deletefunction@maazza,请将更正后的代码粘贴到下面好吗?谢谢。正如@maazza所说的,你创建了你的函数,但你没有调用它。在代码中的某个地方,您应该调用它,使其运行..@qasimalbaqali,谢谢,我刚刚上传了url。你的意思是在url中调用它吗?不是。我的意思是你创建了
delete
函数,这很好,但是现在你需要在创建函数后简单地调用它,就像在
delete()
中调用一样,这样当表单有效时,函数就会被创建,然后正确执行?还记得如何执行函数吗?您只需编写函数和两个括号来调用它。您好@mrvol,实际上最后我使用了另一种使用SQL原始查询的方法,这只是一种破解,但至少可以解决问题。@Héléna如果您想插入数据库数据,这是最简单的。首先,您需要为这些数据创建模型。这与字段
上传者、日期、问题、选择、投票类似。在表单清理之后,像下面的例子一样迭代文件,并创建带有值的列表。然后像这样将列表保存到DB