django 模型(数据库)

准备工作

首先 Django 要操作数据库之前,需要先配置DATABASES信息,并且编辑models.py,生成对应的表

配置数据库 setting.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'student',
        'USER': 'student',
        'PASSWORD': 'student',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

编辑models.py并生成对应的表,如student,里面有三列数据,分别是student、age、height(models.py)

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models

class student(models.Model):
    name = models.CharField(max_length=30)
    age = models.IntegerField()
    height = models.IntegerField()

生成配置数据并在数据库中创建表

python manage.py makemigrations
python manage.py migrate

这里写图片描述

ok,现在就可以操作数据库了

我们通过django shell 命令行来操作

python manage.py shell
from a.models import student

新建一个对象的方法
1、student.objects.create(name='xx', age=xx, height=xx)

2、S = student.objects.create(name='xx', age=xx, height=xx)
   S.save()

3、S = student.objects.create(name='xx')
   S.age = xx
   S.height = xx
   S.save()

4、student.objects.get_or_create(name='xx', age=xx, height=xx)

第四种方法是防止重复很好的方法,但是速度要相对慢些,返回一个元组,第一个为Person对象,第二个为True或False, 新建时返回的是True, 已经存在时返回False.


查找一个对象的方法

查找对象,objects.get()只可以查找单个对象

>>> student.objects.get(name='wanglei')
<student: wanglei>
>>> student.objects.get(age=25)
<student: wanglei>

查找所有对象,objects.all()可以获取到所有对象

>>> student.objects.all()
<QuerySet [<student: wanglei>, <student: hongxue>, <student: wanglei>]>

objects.all()还可以切片操作,例如获取前两个用户

>>> student.objects.all()[:2]
<QuerySet [<student: wanglei>, <student: hongxue>]>

如果要获取满足一些条件的对象,可通过filter进行筛选

1、获取name为wanglei的对象

student.objects.filter(name='wanglei')

2、获取name中包含lei的对象,区分大小写

>>> student.objects.filter(name__contains='lei')
<QuerySet [<student: wanglei>, <student: wanglei>]>

3、获取name中包含Lei的对象,不区分大小写

>>> student.objects.filter(name__icontains='Lei')
<QuerySet [<student: wanglei>, <student: wanglei>]>

4、获取name中以w开头的对象,区分大小写

>>> student.objects.filter(name__regex='^w')
<QuerySet [<student: wanglei>, <student: wanglei>]>

5、获取name中以W开头的对象,不区分大小写

>>> student.objects.filter(name__iregex='^W')
<QuerySet [<student: wanglei>, <student: wanglei>]>

如果要排除一些条件的对象,可通过exclude进行过滤
1、排除height为170的所有对象

>>> student.objects.exclude(height=170)
<QuerySet [<student: hongxue>, <student: wanglei>]>

2、查找以W开头的用户,不区分大小写,并排除height为150的用户

>>> student.objects.filter(name__regex='^w').exclude(height=150)
<QuerySet [<student: wanglei>]>

通过web页面录入student信息

1、编写models.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models

class student(models.Model):
    name = models.CharField(max_length=30)
    age = models.IntegerField()
    height = models.IntegerField()

2、编写forms.py

from django import forms

class AddStudentInfo(forms.Form):
    name = forms.CharField(max_length=30)
    age = forms.IntegerField()
    height = forms.IntegerField()

3、编写views.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.shortcuts import render

from .models import student
from .forms import AddStudentInfo

def index(request):
    if request.method == 'POST':
        stu = AddStudentInfo(request.POST)
        if stu.is_valid():
            name = stu.cleaned_data['name']
            age = stu.cleaned_data['age']
            height = stu.cleaned_data['height']
            student.objects.get_or_create(name=name, age=age, height=height)
            return render(request, 'return.html')
    else:
        stu = AddStudentInfo()
        return render(request, 'index.html', {'stu': stu})

4、编写template
index.html

<!DOCTYPE html>
<html>
<head>
    <title>insert student info</title>
</head>

<body>
    <form method='post'>
    {% csrf_token %}
    {{ stu }}
    <input type='submit' value='提交'>
    </form>
</body>
</html>

return.html

<a href='/index'>student insert success, next</a>

5、编写urls.py

from django.conf.urls import url
from django.contrib import admin
from a import views

urlpatterns = [
    url(r'^index/$', views.index, name='index'),
    url(r'^admin/', admin.site.urls),
]

6、运行python程序

python manage.py runserver 0.0.0.0:8000

7、访问页面插入数据并提交

单击提交数据

这里写图片描述

提交数据后显示信息插入成功,继续
这里写图片描述

再次回到学生数据插入页面

这里写图片描述

8、查看插入至数据库的学生信息

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值