1.model.py創(chuàng)建學(xué)生類student
from datetime import datetime
from django.db import models
class Student(models.Model):
# def __init__(self, name, age=None, sex=None):
# super().__init__()
# self.s_name=name
# self.s_age=age if age else self.s_age
# self.s_sex=sex if sex else self.s_sex
# # 創(chuàng)建時(shí)間
# self.creat_time=datetime.now()
# self.operate_time=datetime.now()
#自增字段
# s_id=models.AutoField()
#字符串
s_name=models.CharField(max_length=10,unique=True,verbose_name='姓名')
# int類型
s_age=models.IntegerField(default=16,verbose_name='年齡')
#布爾類型
s_sex=models.BooleanField(default=1,verbose_name='性別')
#創(chuàng)建時(shí)間,用于第一次時(shí)間的創(chuàng)建
creat_time=models.DateTimeField(auto_now_add=True,verbose_name='創(chuàng)建時(shí)間')
#修改時(shí)間
operate_time=models.DateTimeField(auto_now=True,verbose_name='修改時(shí)間')
#小數(shù)燎字,精確整數(shù)和小數(shù)位數(shù)
#EmailField()
# 圖片
# ImageField
# 在數(shù)據(jù)庫(kù)中改變字段名字
# db_column
#s_name=models.CharField(db_column=''xxx',max_length=10,unique=True,verbose_name='姓名')
class Meta:
db_table='student'
2.對(duì)數(shù)據(jù)進(jìn)行處理
1)增加學(xué)生
方法1:
Student.objects.create()
方法二:
stu=Student()
stu.s_name='xxx'
stu.save()
方法三:
stu=Student(x1,x2,...)
stu.save()
2)查詢學(xué)生
- all :查詢所有數(shù)據(jù)
- filter:獲取的結(jié)果為queryset(查詢集)硬贯,結(jié)果可以返回空收捣,一個(gè)或多個(gè)對(duì)象
- get() 獲取的結(jié)果為object(單個(gè))對(duì)象,如果沒有滿足條件的對(duì)象獲取會(huì)報(bào)錯(cuò)臭埋,獲取的對(duì)象超過一個(gè)也會(huì)報(bào)錯(cuò)
- 注意:get()能不用就不用,最后就不要用
- exclude :不包含 獲取不包含該對(duì)象以外的所有對(duì)象
- order_by :排序 +:升序 -:降序
- values-->獲取單個(gè)字段
- first:獲取queryset(查詢集)中的第一個(gè)對(duì)象
- last:獲取queryset(查詢集)中的最后一個(gè)對(duì)象
- 切片--->前面那個(gè)下標(biāo)要考慮取值范圍臀玄,后面那個(gè)不用
- 模糊查詢:contains==>'%x%' startswith==>'x%' endswith==>'%x'
- isnull/isnotnull 判斷是否為空/是否不為空
- in 判斷在范圍之內(nèi)
- pk:與id功能相同
- 比較運(yùn)算:gt(大于) gte(大于等于) lt(小于) lte(小于等于)
- 邏輯運(yùn)算:Q(條件) | Q(條件) 邏輯或 ;Q(條件) & Q(條件) 邏輯與 ;~Q(條件) 邏輯非
3)修改學(xué)生
方法一:
stu=Student.objects.get(條件)
stu.字段=修改值
stu.save()
方法二:
Student.objects.filter(條件).update(修改字段=修改值)
4)刪除學(xué)生
stu=Student.objects.get(條件)
stu = Student.objects.filter(條件).first()
stu.delete()
from django.db.models import Q
from django.http import HttpResponse
from django.shortcuts import render
from app.models import Student
def create_stu(request):
# 創(chuàng)建學(xué)生信息
# 引入ORM概念:對(duì)象關(guān)系映射 insert into student value()
# 第一種
# Student.objects.create(s_name='小王')
# 第二種
# stu=Student()
# stu.s_name='小坑'
# stu.save()
# 第三種(盡量少用斋泄,問題很多)
# stu=Student('小菜',20,0)
# stu.save()
return HttpResponse('創(chuàng)建學(xué)生方法')
def select_stu(request):
'''
查詢數(shù)據(jù)
all :查詢所有數(shù)據(jù)
filter:獲取的結(jié)果為queryset(查詢集),結(jié)果可以返回空镐牺,一個(gè)或多個(gè)對(duì)象
get() 獲取的結(jié)果為object(單個(gè))對(duì)象炫掐,如果沒有滿足條件的對(duì)象獲取會(huì)報(bào)錯(cuò),獲取的對(duì)象超過一個(gè)也會(huì)報(bào)錯(cuò)
注意:get()能不用就不用睬涧,最后就不要用
exclude :不包含 獲取不包含該對(duì)象以外的所有對(duì)象
order_by :排序 +:升序 -:降序
values-->獲取單個(gè)字段
first:獲取queryset(查詢集)中的第一個(gè)對(duì)象
last:獲取queryset(查詢集)中的最后一個(gè)對(duì)象
切片--->前面那個(gè)下標(biāo)要考慮取值范圍募胃,后面那個(gè)不用
模糊查詢:contains==>'%x%' startswith==>'x%' endswith==>'%x'
isnull/isnotnull 判斷是否為空/是否不為空
in 判斷在范圍之內(nèi)
pk:與id功能相同
比較運(yùn)算:gt(大于) gte(大于等于) lt(小于) lte(小于等于)
邏輯運(yùn)算:Q(條件) | Q(條件) 邏輯或 ;Q(條件) & Q(條件) 邏輯與 ;~Q(條件) 邏輯非
'''
# all :所有
# select * from student;
# stus=Student.objects.all()
# filter:獲取的結(jié)果為queryset,可以返回空畦浓,一條或多條
# select * from student where s_name='小李'
# stus=Student.objects.filter(s_name='小李')
# 查詢年齡等于16痹束,年齡不存在時(shí),結(jié)果空
# stus=Student.objects.filter(s_age=16)
# get() 獲取的結(jié)果為object對(duì)象讶请,獲取不成功會(huì)報(bào)錯(cuò)祷嘶,結(jié)果超過一條也會(huì)報(bào)錯(cuò)
# 獲取年齡等于20的學(xué)生,獲取對(duì)象時(shí)夺溢,如果滿足的對(duì)象超過一個(gè)會(huì)報(bào)錯(cuò)
# stus=Student.objects.get(s_age=18)
# stus=Student.objects.get(id=100)
# 查詢多條
# stus=Student.objects.filter(s_age=16).filter(s_name='小李')
# stus=Student.objects.filter(s_age=16,s_name='小李')
# exclude :不包含
# 查詢姓名不等于小紅的學(xué)生信息
# stus=Student.objects.exclude(s_name='小李')
# order_by :排序 +:升序 -:降序
#排序论巍,安照id升序/降序===>asc/desc
# stus=Student.objects.all().order_by('id')
# stus = Student.objects.all().order_by('-id')
# values-->獲取單個(gè)字段
# stus=Student.objects.all().values('id')
# return HttpResponse(stus)
# get(),first()-->獲取單個(gè)對(duì)象
# stus=Student.objects.get(id=2)
# stus=Student.objects.filter(id=100).first()
# return HttpResponse(stus)
#first(),last()-->獲取單個(gè)對(duì)象
# stus=Student.objects.all().order_by('id').last()
# stus = Student.objects.all().order_by('-id').first()
# stus = Student.objects.all().order_by('-id')[0]
# return HttpResponse(stus.id)
# 切片--->前面那個(gè)下標(biāo)要考慮取值范圍,后面那個(gè)不用
# stus = Student.objects.all().order_by('-id')[:100]
# 模糊查詢
# select * from student name like '%李%'
# stus=Student.objects.filter(s_name__contains='哈')
# select * from student name like '小%'
# stus = Student.objects.filter(s_name__startswith='小')
# select * from student name like '%王'
# stus = Student.objects.filter(s_name__endswith='王')
#isnull/isnotnull判斷是否為空
# stus = Student.objects.filter(s_name__isnull=False)
# stus = Student.objects.filter(s_name__isnotnull=False)
# in 判斷在范圍之內(nèi)
# stus=Student.objects.filter(id__in=[1,2,6])
# 年齡大于16
# stus = Student.objects.filter(s_age__gt=16)
#pk
# stus = Student.objects.filter(id=3)
# stus=Student.objects.filter(pk=3)
# Q(),查詢姓名叫小花的风响,或者年齡為18
# stus=Student.objects.filter(Q(s_name='小李') | Q(s_age=20))
# stus = Student.objects.filter(Q(s_name='小李') & Q(s_age=20))
# 查詢姓名不叫小花的嘉汰,或者年齡為18
# stus = Student.objects.filter(~Q(s_name='小李') | Q(s_age=20))
# 獲取學(xué)生姓名
# 方法一
# for stu in stus:
# print(stu.s_name)
# 方法二
# stu_names=[stu.s_name for stu in stus]
# print(stu_names)
# return HttpResponse(stu_names)
def delete_stu(request):
#刪除
stu=Student.objects.get(pk=1)
stu = Student.objects.filter(pk=1).first()
stu.delete()
return HttpResponse('刪除')
def update_stu(request):
#更新
# 方法一
stu=Student.objects.get(pk=3)
stu.s_name='小將'
stu.save()
# 方法二
Student.objects.filter(id=2).update(s_name='哈哈')
return HttpResponse('修改')
3.urls.py設(shè)置url
from django.conf.urls import url
from django.contrib import admin
from app import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url('create_stu/',views.create_stu),
url('select_stu/',views.select_stu),
url('delete_stu/',views.delete_stu),
url('update_stu/',views.update_stu),
]