zoukankan      html  css  js  c++  java
  • [Django]模型学习记录篇--基础

    模型学习记录篇,仅仅自己学习时做的记录!!!

    实现模型变更的三个步骤:

    模型字段类型:

    1. AutoField自增字段   一个IntegerField 根据实际ID自动增长.
    2. BigIntegerField   一个64位整数, 这个字段默认的表单组件是一个TextInput.
    3. BinaryField     一个用来存储原始二进制码的Field.
    4. BooleanField    
    5. CharField  class CharField(max_length=None[, **options]), 存储从小到很大各种长度的字符串的地方, 默认的表单样式是 TextInput.
    6. CommaSeparatedIntegerField  一个逗号分隔的整数字段。
    7. DateField   一个使用Python的datetime.date实例表示的日期.
    8. DateTimeField   通过Pythondatetime.datetime实例表示的日期和时间.
    9. DecimalField   十进制浮点数,表示python中 Decimal 的一个实例.
    10. DurationField   用作存储一段时间的字段类型 - When used on PostgreSQL, the data type used is an interval
    11. EmailField  that the value is a valid email address
    12. FileField  一个上传文件的字段

    a)    FileField and FieldFile

    1. FilePathField   一个 CharField ,内容只限于文件系统内特定目录下的文件名。
    2. FloatField   通过一个浮动实例表示Python中的浮点数。
    3. ImageField
    4. IntegerField   一个整数。从 -21474836482147483647 范围内的值是合法的。默认的表单输入工具是TextInput.
    5. IPAddressField
    6. GenericIPAddressField
    7. NullBooleanField
    8. PositiveIntegerField  跟IntegerField一样,但必须是大于等于0,从0到147483647 范围内的值是合法的。
    9. PositiveSmallIntegerField   跟PositiveIntegerField一样,但只只允许在0到32767范围内
    10. SlugField
    11. SmallIntegerField  跟IntegerField一样,范围从-32768到32767范围内是合法的
    12. TextField   大的文本字段,默认表单是Textarea.
    13. TimeField   时间字段,类似于DateFieldDateTimeField
    14. URLField
    15. UUIDField

    模型执行查询

    :模型执行查询语句写在view中函数中

    基础:

    • 每个模型都是django.db.models.Model 的一个Python 子类。
    • 模型的每个属性都表示数据库中的一个字段。
    • Django 提供一套自动生成的用于数据库访问的API;详见执行查询

     

    通过模型中的管理器构造一个查询集,来从你的数据库中获取对象。

    从SQL 的角度,查询集SELECT 语句等价,过滤器是像WHERELIMIT 一样的限制子句。你可以从模型的管理器那里取得查询集。每个模型都至少有一个管理器,它默认命名为objects。通过模型类来直接访问它,

    一般查询集(相当于select * from LOrder):

    LOrder.objects #模型管理器, 通过模型中的管理器构造一个查询集,来从你的数据库中获取对象.

    注: 可以在每个模型类中重命名它们。在模型中定义一个值为models.Manager()的属性,来重命名管理器

    LOrder.objects.all() #获取一个表中所有对象,这是最简单的方式

    过滤查询集 (相当于select * from LOrder where +条件语句):

    LOrder.objects.filter(查询参数) #获取一个表中满足查询参数的对象,

    例: LOrder.objects.filter(serv_id='121768152983'),意为查询LOrder数据标识serv_id字段下为121768152983的一行信息

    LOrder.objects.exclude(查询参数) #获取一个表中不满足查询参数的对象,执行与filter相反的结果

    注:了解上面两种模型执行查询方法后,可以试着链式查询方式

    LOrder.objects.get(查询参数) #获取一个表中满足查询参数的单一对象,

    值得注意的是,使用get() 和使用filter() 的切片[0] 有一点区别。如果没有结果满足查询,get() 将引发一个DoesNotExist 异常。这个异常是正在查询的模型类的一个属性 —— 所以在上面的代码中,如果没有主键为1 的Entry 对象,Django 将引发一个Entry.DoesNotExist

    类似地,如果有多条记录满足get() 的查询条件,Django 也将报错。这种情况将引发MultipleObjectsReturned,它同样是模型类自身的一个属性。

    限制查询集(相当于select * from LOrder limit 10):

    LOrder.objects.all()[1:10:2] #获取一个表中1到10行且每隔2行的对象

    字段查询集:

    LOrder.objects.filter(completed_time__lte='2015-12-01') #筛选出字段completed_time__lte小于2015-12-01的数据

    LOrder.objects.filter(completed_time__gte='2015-12-01') #筛选出字段completed_time__lte大于2015-12-01的数据

    注: exclude中lte是大于,gte是小于

    LOrder.objects.filter(completed_time__exact='2014-11-21 17:29:21') #exact是精确匹配

    LOrder.objects.filter(completed_time__contains ='2015') # contains是模糊匹配,相当于like’%2015%’

    注:iexact,和icontains是不区分大小写,上面的区分大小写

    1: 一般来说,只有在请求查询集的结果时才会到数据库中去获取它们。

    2: 执行查询函数具体参见django1.8.2官方文档中的查询集API参考

    最后编辑于2016-01-05,此为模型部分第一次学习记录后续继续完善

  • 相关阅读:
    HTTP 的学习
    标量方程求解
    限制器
    差分格式
    Archlinux的基本配置
    布拉休斯方程数值求解
    GNU大型项目构建和覆盖率生成(第一篇)
    plot3d网格读取写入与可视化
    abaqus中的约束
    向量范数和矩阵范数
  • 原文地址:https://www.cnblogs.com/CQ-LQJ/p/5103559.html
Copyright © 2011-2022 走看看