Django学习日志三:模型层

下面我们来学习模型层的使用:

五、模型层

模型层用于和数据交互。可以通过模型和关系型数据库实现持久化的操作。在Django开发中主要以MySQL作为首选数据库,同时使用非关系型数据库MongoDB存储日志、记录历史信息等数据。

Django中默认使用SQLite数据库,在开发中如果需要使用MySQL关系型数据库,就需要进行额外配置。步骤如下:

  • ENGINE参数:表示数据库的引擎
  • NAME参数:表示访问MYSQL中的数据库的名称
  • USER参数:表示访问MYSQL的用户名
  • PASSWORD参数:表示访问MYSQL的密码
  • HOST参数:表示访问IP数据库的地址(如果访问本地数据库,可以写为localhost或者127.0.0.1)
  • PORT参数:表示数据库的端口(端口是3306)

[示例]在hello/app/models.py文件中,定义一个模型类Student,并定义数据表名student

from django.db import models

class Student(models.Model):

    s_name = models.CharField(max_length=10, unique=True)
    s_age = models.IntegerField(default=16)
    s_sex = models.BooleanField(default=1)
    operator_time = models.DateTimeField(auto_now=True)
    create_time = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = 'student'

注意:由于Student继承models.Model类,而models类中定义了自增的id,因此在Student模型中相当于定义了6个字段:

在模型中还定义了嵌套类Meta,用于向Django说明关于此模型的各种元数据信息,如数据表名称,以及查询数据表时默认排序规则等

Django中模型字段定义说明AutoField一个根据实际id自动增长的IntegerField,通常不指定。不指定时主键字段自动添加到模型中CharField = (max_length=字符长度)字符串,参数说明:max_length=字符长度TextField大文本字段,一般超过4000字符时使用,默认的表单控件是TextareaIntegerField整数DecimalField =(max_digits=None,decimal_places=None)使用Python的Decimal实例表示的十进制浮点数。参数说明:max_digits=位数总数,decimal_places=小数点后面的数字位数BooleanFieldTrue/False字段,此字段的默认表单控件是CheckboxInputNullBooleanField支持null、True、False这3种值DataField = ([auto_now=False,auto_now_add=False])使用Python的datatime.data实例表示的日期。参数说明:auto_now表示每次保存对象时自动设置该字段为当前时间;auto_now_add表示当对象第一次被创建时自动设置当前时间。auto_now、auto_now_add这两个参数设置是相互排斥的。TimeField使用Python的datatime.data实例表示的时间,参数同DataFieldDataTimeField使用Python的datatime.data实例表示的日期和时间,参数同DataFieldFileField一个上传文件的字段ImageField继承了FileField的所有属性和方法,但对上传的对象会进行校验,确保它是有效的image 字段的约束条件作用null如果为True,则该字段在数据库中是空数据。默认值是Falseblank如果为True,则该字段允许为空白,默认值是Falsedb_column字段的名称,如果未指定,则使用该字段属性的名称db_index如果为True,则在表中为此字段创建索引default默认值primary_key如果为True,则该字段会成为模型的主要字段unique如果为True,则这个字段在表中必须有唯一值

在Django中可以通过数据库迁移命令,将models.py定义的数据模型映射到数据库中,并生成对应的数据表。

步骤一:

在Terminal控制台切换到hello\中输入:

python manage.py makemigrations

(django2.0.7) E:\python save\django\hello>python manage.py makemigrations
Migrations for 'app':
  app\migrations\0001_initial.py

   - Create model Student

此时在app文件夹下的migration文件夹中自动创建了一个0001_initial.py文件。再次执行migrations,会将models.py中的模型与已有数据库对比,如果有差异,则会再次生成类似0001_initial.py的迁移文件。如果没有差异,则不会进行任何操作。

(django2.0.7) E:\python save\django\hello>python manage.py makemigrations
No changes detected

步骤二:

在Terminal控制台切换到hello\中输入:

(django2.0.7) E:\python save\django\hello>python manage.py migrate
...

这样就将makemigrations命令生成的迁移数据库脚本同步到本地数据库中。在第一次使用python manage.py migrate命令时,数据库会自动创建Django中使用的默认数据表,例如,用户表(auth_user)、权限表(auth_permission)等。

注意:本节可以先快速浏览一遍,理解相关MySQL操作即可。今后使用时按照需求写代码。

查询学生模型中的数据,有以下方法:

  • all():查询模型中的所有数据,并返回查询集中的QuerySet结果集。
  • filter():返回一个符合查询条件的QuerySet结果集。
  • get():返回一个符合条件的Student Object结果集。注意,如果没有满足条件的结果集会抛出异常;如果查询的结果超过一个也会抛出异常。
  • exclude():返回不符合条件的QuerySet结果集,和filter()相反。
  • first():查询QuerySet结果集中的第一个对象。
  • last():查询QuerySet结果集中的最后一个对象。
  • order_by():按照某个字段升序或者降序进行排序。

stus=Student.objects.all()

stus=Student.objects.filter(s_age=15)

stus=Student.objects.exclude(s_age=15)

stus=Student.objects.filter(id=1)
stus=Student.objects.get(id=1)
stus=Student.objects.get(pk=1)

stus=Student.objects.all().order_by('-id')[0]
stus=Student.objects.all().order_by('-id').first()

stus=Student.objects.all().order_by('-id').last()

stu = Student()
stu.s_name='王大锤'
stu.s_age=28
stu.yuwen=80
stu.shuxue=90

stu = Student('王大锤',28,80,90)

Student.objects.create(s_name='王大锤',s_age=28,yuwen=80,shuxue=90)

stu=Student.objects.filter(id=2).first()
stu.s_name='小明明'

Student.objects.filter(id=2).update(s_name='小明明')

Student.objects.filter(id=3).delete()

Original: https://blog.csdn.net/DepartureZSH/article/details/123510086
Author: Z天南之城Z
Title: Django学习日志三:模型层

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/735663/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球