Django本地服务器:来自文本文件的原子数据库

时间:2019-05-17 16:09:16

标签: sql django python-3.x

我制作了一个Web应用程序,该应用程序接收一个文本文件,读取每一行,接受第11个字符并将其保存到SQLite3 db。在多个请求运行时,如何锁定数据库或拥有两个或多个单独的表?

我在Django的settings.py中添加了添加ATOMIC_REQUESTS':True。 并且我尝试为每个请求创建临时表,但无法弄清楚。我对Django 2.2非常了解

我的View.py

def home(request):

    if request.method == 'GET': 
        return render(request, 'home.html')
    if request.method == 'POST':

        form = DocumentForm(data=request.POST, files=request.FILES)
        print(form.errors)
        if form.is_valid():
            try:
                f = request.FILES['fileToUpload']
            except:
                print('\033[0;93m'+ "No File uploaded, Redirecting" +'\033[0m')
                return HttpResponseRedirect('/tryagain')
            print('\033[32m'+ "Success" +'\033[0m')
            print('Working...')
            line = f.readline()
            while line:
                #print(line)
                mst = message_typer.messages.create_message(str(line)[11])
                line = f.readline()
        else:
            print('\033[0;91m'+ "Failed to validate Form" +'\033[0m')


        return HttpResponseRedirect('/output')
    return HttpResponse('Failure')




def output(request):
    s = message_typer.messages.filter(message='s').count()
    A = message_typer.messages.filter(message='A').count()
    d = message_typer.messages.filter(message='d').count()
    E = message_typer.messages.filter(message='E').count()
    X = message_typer.messages.filter(message='X').count()
    P = message_typer.messages.filter(message='P').count()
    r = message_typer.messages.filter(message='r').count()
    B = message_typer.messages.filter(message='B').count()
    H = message_typer.messages.filter(message='H').count()
    I = message_typer.messages.filter(message='I').count()
    J = message_typer.messages.filter(message='J').count()
    R = message_typer.messages.filter(message='R').count()

    message_types = {'s':s, 'A':A, 'd':d, 'E':E, 'X':X, 'P':P,\
                     'r':r, 'B':B, 'H':H, 'I':I, 'J':J, 'R':R }
    output = {'output':message_types}
    #return HttpResponse('Received')
    message_typer.messages.all().delete()
    return render(request, 'output.html',output)

网页加载后,它应该在上载的文本文件的第11个位置显示每个字符的简单细分。

但是,如果两个请求同时运行,则发出请求的第一页将出现操作错误; Db已锁定。 追溯到这里: message_typer.messages.all().delete()

第二页将汇总上载的两个文件的总数。

我确实想在此后擦除表格,以便下一个用户将有一个空表格来填充并执行计数。

有更好的方法吗?

0 个答案:

没有答案