django-单表查询和商品详情案例

一. 查询单个对象

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/,输入账号密码进入后台系统。

 将商品信息添加进去,如:

然后数据库可查看到数据:

 图片则是在根目录新建的文件夹中,创建模型的那个路劲中:

 至此,学会了如何单表查询,增删改和创建商品详情案例学会后台管理增加记录信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值