Auth: 王海飞 Data:2018-04-23 Email:779598160@qq.com github:https://github.com/coco369/knowledge
通过讲mysql的系统,翻译一遍,在django中通过创建model去和数据库中的表进行一一映射,并且通过ORM封装 的处理方式去练习这一到习题,并写出如下的解题答案
在model中定义数据库,其中的性别,男的存1,女的存0。
class Student(models.Model):
stuname = models.CharField(max_length=20)
stusex = models.BooleanField()
stubirth = models.DateField()
stutel = models.CharField(max_length=255)
class Meta:
db_table = 'student'
python manage.py makemigrations
python manage.py migrate
<form action="/app/addStu/" method="post">
stuname: <input type="text" name="name">
stusex: <input type="text" name="sex">
stubirth: <input type="date" name="birth">
stutel: <input type="text" name="tel">
<input type="submit" value="提交">
</form>
stu = Student()
stu.stuname = stuname
stu.stusex = sex
stu.stubirth = birth
stu.stutel = tel
stu.save()
Student.objects.create(stuname=stuname,
stusex=sex,
stubirth=birth,
stutel=tel)
在Student模型中重构__init__()方法,添加如下代码
def __init__(self, name, birth=None, sex=None,tel=None):
super().__init__()
self.stuname = name
self.stubirth = birth
self.stusex = sex
self.stutel = tel
# 视图函数中定义创建学习信息的方法为:
stu = Student('小草', 18, 1, 12331244323)
stu.save()
注意:重构__init__方法的时候,一定要使用super().__init__(),否则会报studen对象没有_state的属性。
使用all()方法获取所有的数据
Student.objects.all()
Student.objects.filter(stusex=0)
或者
Student.objects.exclude(stusex=1)
其中:
filter():返回符合条件的数据
exclude():过滤掉符合条件的数据
Student.objects.all().order_by('-id')
其中:
order_by('id'):表示按照id升序的排列
order_by('-id'):表示按照id降序的排列
Student.objects.all().values()
Student.objects.all().values('s_name', 's_age')
Student.objects.filter(stubirth__gte='1980-01-01',
stubirth__lte='1990-01-01')
Student.objects.filter(s_name__contains='小')
Student.objects.filter(s_name__startswith='小')
Student.objects.filter(s_name__endswith='小')
# select * from student where id in (1,2)
stus = Student.objects.filter(id__in=[1,2])
Student.objects.filter(id=1)
Student.objects.get(id=1)
Student.objects.get(pk=1)
# get获取不到数据会直接报错, filter获取不到数据是返回空
stus = Student.objects.get(pk=5)
Student.objects.filter(id=5)
# get只能返回一个数据,返回多个会报错
Student.objects.get(s_age=15) # 前提条件:数据库中s_age为15的数据有多条
# 获取按照id降序的第一个学生信息
Student.objects.all().order_by('-id')[0]
Student.objects.all().order_by('-id').first()
# 获取所有学生(按照id降序)中最后一个学生信息
Student.objects.all().order_by('-id').last()