您的位置:首页 > 数据库

django 模型(数据库)

2018-01-12 16:06 701 查看
准备工作

新建一个对象的方法

查找一个对象的方法

通过web页面录入student信息

准备工作

首先 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、查看插入至数据库的学生信息

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  django templates