一. 查询单个对象
1. 查询一个
Movie.objects.get(id="2") # 有且仅有一个结果,不然会报错,推荐下一个
Movie.objects.filter(id="2") # 查询不到返回空列表,不会报错。
2. 获取第一个
Movie.objects.first()
3. 获取最后一个
MOvie.objects.last()
4. 获取总记录数:
Movie.objects.count()
二. 查询多个对象
1. 获取所有记录
Movie.objects.all()
2. 切片(不支持负索引)
Movie.objects.all()[5:10]
3. 过滤
Movie.objects.filter(name="肖生克的救赎”)
4. 模糊查询
4.1 以爱开头的电影名
Movie.objects.filter(name_startswith="爱”)
4.2 以爱结尾的电影名
Movie.objects.filter(name_endswith="爱”)
4.3 包含爱的电影名
Movie.objects.filter(name_contains="爱”)
4.4 查询默认是区分大小写,如果要忽略大小写查询,则
如查询 i或I 开头的电影名
Movie.objects.filter(name_istartswith="i”)
其他一样,iendswith,icontains。
其他
1,查询某字段是否为空
Movie.objects.filter(name_isnull=True)
2. 多条件查询
Movie.objects.filter(name_startswith="爱”,id="")
3. 部分查询
Movie.objects.values("id","name").filter(name_contains="爱“)
4. 排查查询
Movie.objects.filter(name_startswith="爱”).exclude(name_endswith="爱")
5. 排序
Movie.objects.order_by("id") # 升序
Movie.objects.order_by("-id") # 降序
6. 大于表示
Movie.objects.fliter(id__gt="100") # 大于100的
Movie.objects.fliter(id__lt="100") # 小于100的
Movie.objects.fliter(id__lte="100") # 小于等于100的
Movie.objects.fliter(id__range=("100","120") # 大于100小于120的
Movie.objects.fliter(id__in=("100","120") #id=100和id=120的
编写显示底层的sql语句方法:
def show_sql:
from django.db import connection
print connection.queries[-1]['sql']
三. 单表的增删改
1. 增加数据
方法一:
通过调用模型类对象的save()方法
from movie.models import *
t = Movies(name="",intro="",img_url="")
t.save()
方法二:
通过object管理器的create方法,底层也是调用了save方法的
Movies.objects.create(name="",intro="",img_url="")
2. 删除数据
方法一:
实例化要删除的对象使用delete()删除
Movies.objects.get(id="1").delete()
方法二:
删除多个包含*的字段
Movies.objects.filter(name_contains="*").delete()
3. 修改数据
方法一:
实例化要修改的对象然后对其属性赋值最后保存
last_data = Movies.objects.last()
last_data.name = “最后的电影名”
last_data.save()
方法二:
用object管理器的filter方法
Movies.objects.filter(name="修改前").update(name="修改后")
四. 商品详情案例
常用字段和属性
常用字段类型
- django所有的数据模型都继承自models.Model
- Charfield max_length(输入框)
- TextField 没有长度限制的字符串(文本域)
- DateTimeField 日期+时间。
- BooleanField 真假。
- NullBooleanField Null,真假,。
- Integer 整数。
- PositivelntegerField 正整教。
- DecimalField max digits(几位数)
- decimal places(小数点后保留几位)。
- lmageField 图片 依赖于 Pillow(处理图片)
- upload to='upload' 指定文件上传到目录。
- FileField(lmageField继承FileField)。
- AutoField.ForeignKey 1:n.ManyToManyField n:n。
- EmailField 邮箱。
- UUIDField 重复的概率非常低基本可以忽路,全世界都不一样的标示,uuid的产生和服务器的环境有关(CPU,网关,)唯一性的标示,用户模块,订单号。
- 不同的字段在后台对应不同的htmI89组件
- ImageField 依赖于Pilow组件(python库)
常用属性
- unique 标示这个字段唯一
- default 默认的意思,(如果不写的话就使用默认的值)
- null=True 允许字段为nul,(允许数据库为null)数据库层面的
- blank=True表单阶段的,admin后台的
- auto_now 针对时间的,自动调整当前,(当修改条目的时候,这个时间会自动更新),每次修改都会更新(修改,保存的时
- 候才会生效,)
- auto_now_add 针对时间的,只添加一次,(创建的时间)
编写模型,并映射到数据库后通过后台管理插入一条数据。
以这张为例子:
1. 创建子应用
python manage.py startapp goods_app
setting.py添加app和链接数据库
2. 编写模型models.py
from django.db import models
# Create your models here.
class Goods(models.Model):
gid = models.AutoField(primary_key=True)
gname = models.CharField(max_length=50)
gdesc = models.TextField()
gprice = models.DecimalField(max_digits=10, decimal_places=2)
count = models.PositiveBigIntegerField()
create_time = models.DateTimeField(auto_now_add=True)
update_time = models.DateTimeField(auto_now=True)
gimg = models.ImageField(upload_to='goods_imgs/')
然后终端运行命令生成迁移文件和同步数据库:
python manage.py makemigrations
python manage.py migrate
# 如果提示安装pillow则
pip install pillow
因为ImageFiled属性需要安装python库,上文常用属性写到过。
成功后数据库如下:
3. 创建管理员
我们不用上文的增删改,用后台系统进行:
admin.py注册后台管理的模型:
from django.contrib import admin
from goods_app.models import Goods
# Register your models here.
admin.site.register(Goods)
然后终端输入命令添加超级管理员:
python manage.py createsuperuser
然后输入自己创建的账号密码,如:
数据库就能找到你的数据了:
4. 后台插入数据
运行项目浏览器访问http://127.0.0.1:8000/admin/,输入账号密码进入后台系统。
将商品信息添加进去,如:
然后数据库可查看到数据:
图片则是在根目录新建的文件夹中,创建模型的那个路劲中:
至此,学会了如何单表查询,增删改和创建商品详情案例学会后台管理增加记录信息。