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