Django(4)

4. 模型的增删改查(ORM模块)

4.1数据的查询

4.1.1 查询所有的数据

查询多条语句

from user.models import UserInfo
data = UserInfo.objects.all()

data就是得到的数据

4.1.2 按照指定条件查询
def get(self, *args, **kwargs):
       """
       Performs the query and returns a single object matching the given
       keyword arguments.
       """
4.1.3 计数语句
data = UserInfo.objects.count()
print(data)
4.1.4 符合条件的多条数据查询
  1. 比较查询

    # 1. 比较查询 大于gt greater then
    data = UserInfo.objects.filter(id__gt = 1)
    
    # 2. id 大于等于3 gte
    data = UserInfo.objects.filter(id__gte = 3)
    
    # 3. id 小于1的人
    data = UserInfo.objects.filter(id__lt = 1)
    
    # 4. id 小于等于1的人 lte
    data = UserInfo.objects.filter(id__lte = 1)
    

    注意点:

    • filter既可以查询一条语句,也可以查询多条语句
    • 但是查询的结果放在一个列表里面
    • 如果查询不到任何满足条件的数据,则返回的是一个空列表
  2. 模糊查询

    # 查询名字中带有 王 的人
    data = UserInfo.objects.filter(name__contains='王')
    
    # 查找姓 王 的人
    data = UserInfo.objects.filter(name__startswitch='王')
    
4.1.5 关于外键的查询
# 获取所有的数据
UserInfo.objects.all()
# 获取外键
add.userinfo_set.all()

4.2 数据的增加

4.2.1 第一种方式

通过创建对象,进行属性设置,最后再保存的方式

# 利用python的思维
>>> from book.models import BookInfo,PersonInfo
>>> book1 = BookInfo(bookname='红楼梦',publictime='2016-12-1')
>>> book1.save()
>>> book1
<BookInfo: 红楼梦>
4.2.2 第二种方式(重点)
# 利用sql的思维
BookInfo.objects.create(bookname='三国演义',publictime='2010-1-1')
# 相当于 sql语句
insert into bookinfo(bookname,publictime) values('三国演义','2010-1-1')

注意:自动保存

4.3 数据的修改

修改

>>> book2 = BookInfo.objects.get(pk=3)
>>> book2
<BookInfo: 三国演义>
>>> book2.publictime='1973-1-1'
>>> book2.save()
>>> BookInfo.objects.filter(bookname='三国演义').update(publictime='1973-10-1')
1

返回

4.4 关于数据库表名的设计

如果没有指定数据库的表名,会以 应用名_模型类名的小写作为数据库的表名

设计数据库表名:

在模型类的内部进行表的设计

class BookInfo(models.Model):
    # 图书名
    bookname = models.CharField(verbose_name='书籍名字',max_length=30)
    # 出版时间
    publictime = models.DateField(verbose_name='出版时间',null=True)
    '''
    auto_now=False    :表示每次保存对象是,自动设置该字段为当前时间,用于做最后一次修改的时间戳
    auto_now_add=False:表示当前对象,第一次被创建时,自动设置当前时间,用于创建的时间戳
    当前两个参数时相互排斥的
    null: 允许为空
    '''
    # 阅读量
    count = models.IntegerField(verbose_name='阅读量',default=0)
    # 销量
    seltcount = models.IntegerField(verbose_name='销量',default=0)
    # 逻辑删除
    is_delete = models.BooleanField(verbose_name='逻辑删除',default=False)

    class Meta:
        # 制定数据的表名
        db_table = 'bookinfo'
        #修改后台站点中,数据库表的名字
        verbose_name = '书籍'
        # 去除后台管理站点中,名字的中的s
        verbose_name_plural = verbose_name

注意:修改数据库的表名需要迁移

4.5 关于模型与数据库数据的关系

# 测试的时候,需要将使用到的模型导入
>>> from book.models import BookInfo
# 数据库的一条数据,其实就是模型类的一个实例
# 通过给实例的属性进行赋值的操作,完成数据库字段值的设置
>>> book1 = BookInfo(bookname='红楼梦',publictime='2016-12-1')
>>> book1.save()
>>> book1
<BookInfo: 红楼梦>

注意点:实例完成属性的设置之后,需要保存

4.6 关于orm模型设置数据类型

Field

def __init__(self, verbose_name=None, name=None, primary_key=False,
                 max_length=None, unique=False, blank=False, null=False,
                 db_index=False, rel=None, default=NOT_PROVIDED, editable=True,
                 serialize=True, unique_for_date=None, unique_for_month=None,
                 unique_for_year=None, choices=None, help_text='', db_column=None,
                 db_tablespace=None, auto_created=False, validators=(),
                 error_messages=None):
  • verbose_name:起别名
  • primary_key:主键
  • null:允许为空,默认为False 非空
  • blank:字段允许为空白,表单验证
  • db_column:字段名称,没有指定的话,使用属性的名字
  • db_index:给该字段设置索引
  • unique:说明该字段在这个表里具有唯一值
  • defalut:设置默认值

4.7 模型的相关字段

Field描述
AutoField()如果不指定,则Django自动指定属性名为id的自增长属性,一般不指定
booleanField()布尔值,True,False
NullBooleanField()True,False,null
TextField()大文本字段,字符在4000以上
DecimalField(max_digits=总位数,decimal_places=小数位数)十进制浮点数
DateField()表示日期
TimeField()表示时间
DateTimeField()表示日期时间
FileField()上传的文件的字段
ImageField()对上传的文件进行校验,保证是有效图片
描述
ForeignKey(obj)设置外键
# ForeignKey 的属性
def __init__(self, to, on_delete=None, related_name=None, related_query_name=None,
                 limit_choices_to=None, parent_link=False, to_field=None,
                 db_constraint=True, **kwargs):
  • to:给谁创建外键

  • on_delete

    取值描述
    None删除关联表中的数据时,当前表与其关联的field的行为
    models.CASCADE删除关联数据,与之关联也删除
    models.DO_NOTHING删除关联数据,什么也不做
    models.PROTECT删除关联数据,引发错误ProtectedError
    models.SET_NULL删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空,一对一同理)
    models.SET_DEFAULT删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值,一对一同理)
    models.SET删除关联数据
  • related_name:该属性可用来解决两张表关联时候,访问属性,可以通过这个值访问。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值