如何使用python和sqlite存储数据?

时间:2018-08-16 18:34:54

标签: python sql sqlite flask flask-wtforms

以下代码应为简单的用户注册。

database.db

from django.shortcuts import render, redirect, render_to_response
from django.http import HttpResponse, HttpResponseRedirect
from django.views.generic.edit import FormMixin

from .models import Report_item, ClaimForm, UserNotification
from django.views import generic
from django.db.models import Q
from django.contrib.auth import login, authenticate
from django.shortcuts import render, redirect
from django.utils import timezone
from django.views.generic import View, UpdateView, DeleteView
from .forms import SignUpForm, LoginForm
from django.contrib.auth import logout

from django.contrib.auth import get_user_model
from django.contrib.auth.backends import ModelBackend
from django.core.urlresolvers import reverse_lazy
from django.db.models import Q


def IndexView(request):
    if request.user.is_anonymous:
        print("Hello")
        query_list = Report_item.objects.all()
        query = request.GET.get('q')
        if query:
            query_list = query_list.filter(Q(title__icontains=query) |
                                           Q(item_type__icontains=query) |
                                           Q(city__icontains=query) |
                                           Q(Description__icontains=query)).distinct()
        context = {
            "object_list": query_list,
        }
        return render(request, "feed/index.html", context)
    else:
        query_list = Report_item.objects.all()
        query = request.GET.get('q')
        if query:
            query_list = query_list.filter(Q(title__icontains=query) |
                                           Q(item_type__icontains=query) |
                                           Q(city__icontains=query) |
                                           Q(location__icontains=query) |
                                           Q(Description__icontains=query)).distinct()

        n = UserNotification.objects.filter(user=request.user, viewed=False)
        context = {
            "object_list": query_list,
            'notification': n,
            'count': n.count(),
        }
        return render(request, "feed/index.html", context)


class SearchCtaegoryView(generic.ListView):
    template_name = "feed/index.html"

    def get_queryset(self):
        query_list = Report_item.objects.all()
        slug = self.kwargs.get("slug")
        if slug:
            query_list = query_list.filter(Q(category__icontains=slug) | Q(category__iexact=slug))
        return query_list


class ReportCreate(generic.CreateView):
    model = Report_item
    fields = ['title', 'item_type', 'location', 'city', 'image', 'Description']

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.owner = self.request.user
        self.object.save()
        return FormMixin.form_valid(self, form)


class ReportDetail(generic.DetailView):
    model = Report_item
    template_name = 'feed/detail.html'


class ClaimForm(generic.CreateView):
    model = ClaimForm
    fields = ['Your_name', 'Your_mobile_number', 'Detail_proof']


class SignUpForm(generic.CreateView):
    form_class = SignUpForm
    template_name = "feed/SignUp.html"

    def get(self, request):
        form = self.form_class(None)
        return render(request, self.template_name, {'form': form})

    def post(self, request):

        form = self.form_class(request.POST)
        if form.is_valid():
            print("form valid")
            user = form.save(commit=False)
            username = form.cleaned_data['username']
            password = form.cleaned_data['password1']
            user.set_password(password)
            form.save()
            user = authenticate(username=username, password=password)
            if user is not None:
                if user.is_active:
                    login(request, user)
                    return redirect('feed:index')
        else:
            print(form.errors)

        return render(request, self.template_name, {'form': form})


class LoginForm(generic.CreateView):
    print("login")
    form_class = LoginForm
    template_name = "feed/SignUp.html"

    def get(self, request):
        form = self.form_class(None)
        return render(request, self.template_name, {'form': form})

    def post(self, request):
        form = self.form_class(request.POST)
        if form.is_valid():
            UserModel = get_user_model()
            email = request.POST['email']
            password = request.POST['password']
            username = UserModel.objects.get(email=email)
            user = authenticate(request, username=username, password=password)
            if user is not None:
                if user.is_active:
                    login(request, user)
                    return redirect('')
        else:
            print(form.errors)


def logout_view(request):
    logout(request)
    query_list = Report_item.objects.all()
    return render(request, "feed/index.html", {'object_list': query_list})


def Profile(request, username):
    print(username)
    qs = Report_item.objects.filter(owner__username=username)
    context = {
        "object_list": qs,
    }
    return render(request, "feed/profile.html", context)


class ReportUpdate(UpdateView):
    model = Report_item
    fields = ['title', 'item_type', 'location', 'city', 'image', 'Description']


class ReportDelete(DeleteView):
    model = Report_item
    success_url = reverse_lazy('feed:index')


class RequestItem(generic.CreateView):
    model = UserNotification
    fields = ['Name', 'Mobile_No', 'Proof']

    def form_valid(self, form):
        print(self.kwargs)

        self.object = form.save(commit=False)
        qs = Report_item.objects.filter(id=self.kwargs.get("pk"))
        self.object.user = qs[0].owner
        self.object.save()
        return HttpResponse("<h1>Hello Friends </h1>")


def show_notification(request, notification_id):
    n = UserNotification.objects.get(id=notification_id)
    context = {
        "n": n,
    }
    n.viewed = True
    n.save()
    return render(request, "feed/notification.html", context)


def read_notification(request, notification_id):
    n = UserNotification.objects.get(id=notification_id)
    n.viewed = True
    n.save()
    return HttpResponse("<h1>Hello Friends chai pee lo</h1>")


def mynotification(request):
    n = UserNotification.objects.filter(user=request.user, viewed=False)
    print(type(n))
    return render_to_response("feed/loggedin.html",
                              {'full_name': request.user.first_name, 'notification': n, })


def read_Notification(request):
    n = UserNotification.objects.filter(user=request.user)
    print(type(n))
    return render_to_response("feed/loggedin.html",
                              {'full_name': request.user.first_name, 'notification': n, })

views.py

import sqlite3

conn = sqlite3.connect('database.db')
conn.execute('CREATE TABLE accounts (username TEXT, password TEXT)')
conn.close()

错误:

sqlite3.OperationalError:没有此类表格:帐户

1 个答案:

答案 0 :(得分:0)

当未配置sqlite3时,

isolation_level库将隐式执行事务管理。缺省值为在事务中隐式管理修改数据库的语句。 在这种模式下,您需要在执行操作后对数据库进行修改。

conn.execute('CREATE TABLE accounts (username TEXT, password TEXT)')
conn.commit()
  

commit

     

此方法提交当前事务。如果不调用此方法,则从其他数据库连接中看不到自上次调用commit()以来所做的任何操作。如果您想知道为什么看不到已写入数据库的数据,请检查您是否没有忘记调用此方法。

如果要关闭此行为并立即执行操作将数据写入,则可以在建立与数据库的连接时将isolation_level设置为None

conn = sqlite3.connect('sample.sqlite', isolation_level=None)

有一些documentation on the available options to controlling transactions

请注意,尽管{connection.execute起作用)[https://docs.python.org/3/library/sqlite3.html#using-shortcut-methods]作为在数据库中执行操作的快捷方式,但它隐式创建了一个游标。我倾向于更喜欢从连接中显式创建一个游标并将其用于数据库操作。

cur = conn.cursor()
cur.execute('CREATE TABLE accounts (username TEXT, password TEXT)')
conn.commit()
conn.close()