2014-02-24 26 views
1

我有這個以下models.py:如何填充SQLITE3模型一個TXT數據文件

from django.db import models 

class User_Language(models.Model): 
    user = models.CharField(max_length=100) 
    language = models.CharField(max_length=100) 

這forms.py:

from django import forms 

class file_upload_form(forms.Form): 
    title = forms.CharField(max_length=100) 
    file = forms.FileField() 

而這個TXT數據文件,通過分離標籤:

Lucas Rezende Python 
Fabricio Django 
Pappacena Python 

我創造了這個觀點,基本上呈現HTML文件來處理的txt文件:

from django.shortcuts import render, redirect 
from forms import file_upload_form 
from models import User_Language 
from myfreecomm.settings import MEDIA_ROOT 

def upload_file(request): 
    ''' 
    This view handles the file upload 
    ''' 

    if request.method == 'POST': 
     form = file_upload_form(request.POST, request.FILES) 
     if form.is_valid(): 
      handle_uploaded_file(request.FILES['file']) 
      filename = file['filename'] 
      f = open('%s%s' % (MEDIA_ROOT, filename), 'r') 

      for line in f.readline().split('\t'): 
       table = User_Language(user = line[0], language = line[1]) 
       table.save() 
      return redirect('/success_upload/') 

    else: 
     form = file_upload_form() 
    return render(request, 'upload/upload.html', locals()) 

def success(request): 
    return render(request, 'upload/sucess.html', locals()) 

在這一點上我無法弄清楚如何使這個txt文件,命名爲data.txt,被插入到表User_Language

我試着在谷歌的反應,但無法弄清楚如何完成它。

有人可以澄清這個問題嗎?

在此先感謝!

+0

你在哪裏遇到問題?在你的handle_uploaded_file函數中,你只需要遍歷文件併爲每一行創建一個模型實例。什麼讓你感到困惑? –

+0

@DanielRoseman問題是我實際上不知道如何去做。如果問得不多,你能舉個例子嗎? –

+0

我在說,因爲我在互聯網上找到的例子中,我認爲這個'handle_uploaded_file'是一個內置函數......看起來不是,是啊?! –

回答

1

首先,您應該決定是否需要保存上傳的文件。如果您只需要訪問上傳的文件內容,則可以訪問上傳文件的文件對象,如:

if form.is_valid(): 
    doc_fo = form.cleaned_data['file'] 
    for line in doc_fo.readline().split('\t'): 
     ... 

UPD。

如果你想加載到db,你應該在你的模型中使用BinaryField,如果你使用django 1.6。如果你使用Django的早期版本中,你應該在模型中使用的模型和編碼/解碼文件內容TextFieldBase64

二進制領域:

x = ModelX() 
doc_fo = form.cleaned_data['file'] 
x.file = doc_fo.read() 
x.save() 

文本字段模型:

import base64 

x = ModelX() 
doc_fo = form.cleaned_data['file'] 
x.file = base64.b64encode(doc_fo.read()) 
x.save() 

要稍後取內容:

file_content = base64.b64decode(x.file) 
+0

我需要將它加載到數據庫中。 –

+0

增加了關於如何保存的說明 – glmvrml

0

這是一個si多模式,所以你可以在數據庫級別完成。一旦你的模型發展,這可能不是最好的實踐,但如果你使用南方進行遷移,那可能是好的。

所以,你應該去你的控制檯訪問SQLite和發出以下命令:

.separator "\t" 
.import sample.csv user_language 
select * from user_language; --> you should now have data here. 

在我的情況下,數據庫文件和CSV文件在同一個文件夾中。

相關問題