Django MTV模式之M

Django业务流程图:

M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM),做数据存储用的。

Django 官方文档:https://docs.djangoproject.com/zh-hans/3.1/

1、配置数据库mysql

    先安装pymysql(pip install pymysql),然后在Django的setting中配置。

    配置参考https://www.jianshu.com/p/1220bfc1fe63 中的第9章节。

2、创建models.py文件

    在创建APP时,并不会默认生成models.py,需要手工在APP目录创建models.py文件。

3、初始化pymysql

    在Django工程同名APP的__init__.py中写入:

    import pymysql

    pymysql.install_as_MySQLdb()

4、通过模型创建数据表

    4.1 定义数据表的Class

    在models.py文件中定义:

    from django.db import models

    class Student(models.Model):

        # id Django会自动创建,并设置为主键,不需要代码语句创建

        name = models.CharField(max_length=50)

        age = models.IntegerField()

        score = models.IntegerField()

    4.2 makemigrations

        # 生成数据同步脚本,使用这个python脚本,Django才能生成sql语句,才能转换成mysql数据表。

        python manage.py makemigrations

    4.3 migrate

        # 同步数据库,使用4.2中生成的脚本,Django转换生成sql,从而同步到mysql,创建数据表。

        python manage.py migrate

        生成的数据库名是APP名_Class名。

5、从已存在的数据表,反向生成模型

    5.1 生成模型代码

        # 根据已有数据库反向生成django模型

        python manage.py inspectdb [table]

        上面这条语句,可以带表名,则只生成这一张表的模型脚本。

        如果不带表名,则生成所有表的模型脚本。

    5.2 模型脚本保存到models.py文件

        生成的模型脚本,只是输出在输出窗口,可以追加到models.py文件里,或者手工拷贝粘贴到models.py文件里。

6、ORM操作表

    6.1 数据表增加记录

        方法1:

            n=Student()

            n.name='石破天'

            n.age=20

            n.score=96

            n.save()

        方法2:

            Student.objects.create(name='石破天', age=20, score=95)

        方法3:

            info = {"name":"石破天", "age":20, "score":95}

             Student.objects.create(**info )

    6.2 数据表删除记录

        Student.objects.filter(name='石破天').delete()

    6.3 数据表修改

        Student.objects.filter(name='石破天').update(score=100)

    6.4 数据表查询

        Student.objects.all() #选取所有数据

        Student.objects.all().count() #计数

        Student.objects.values('name') #某一列数据

        Student.objects.filter(name='石破天').count() #符合条件计数

        Student.objects.get(score=100)

         Student.objects.get(score=100).name

    6.5 更新或增加

        # defaults是需要更新的数据字典,后面参数是用来查询的是否存在的,如果存在就更新,反之则增加记录

        Student.objects.update_or_create(defaults={"age":20, "score":95}, name='石破天')

    6.6 判断记录是否存在

        Student.objects.filter(score=100).exists()

    6.7 列去重

        Student.objects.distinct().values('score')

    6.8 列排序

        Student.objects.order_by('score').values()  //升序

        Student.objects.order_by('-score').values()  //降序

    6.9 取top 10

        Student.objects.order_by('-score')[:10].values()


        

你可能感兴趣的:(Django MTV模式之M)