Django-模型

一: 概述

  • 使用orm不能创建库
  • 每一个model都是一个Python的类,且该类都是 django.db.models.Model的子类
  • 类的属性就是表的字段 
  • 类对应数据库表
  • 类属性对应数据库表字段
  • 实例化对象对应数据库一条记录
  • 当不指定id时,django会再生成的表中添加一个id字段
  • 表名如果不指定,会使用 app名称_模型类名小写 做为数据库表名字

 

 

 

 

 

 

 

使用ORM操作数据库的流程

 

创建数据库

因为ORM本身没有创建数据库的功能,所以需要我们手动去创建一个数据库,例如 create database mysite;

 

Django的setting配置中配置数据库连接地址

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', 
        'HOST': '127.0.0.1',  
        'PORT': 3306,  
        'NAME': "mysite", 
        'USER': 'root',  
        'PASSWORD': '',  
        'OPTIONS': {'charset':'utf8mb4'},
    }
}

 

配置Django使用pymysql

在项目的__init__.py文件中加入如下两行

# 导入pymysql模块
import  pymysql
# 告诉Django使用pymysql
pymysql.install_as_MySQLdb()

 

 

在app下的model.py文件中定义类(集成models.Model)

class Userinfo(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32,null=False)

 

 

数据库迁移

python3 manage.py makemigrations
python3 manage.py migrate

 

Pycharm连接MySQL

 

 

 填写数据库连接信息即可2.1

 

 

二  orm 13种常用一般api

2.1 在普通python文件里怎么加载django配置

import os

if __name__ == '__main__':
    # 加载Django项目的配置信息
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bmsdemo1.settings")
    # 导入Django,并启动Django项目
    import django
    django.setup()

    from bms import models

  

2.2  all

 

    # all
    ret = models.Person.objects.all()
    print(ret)

  

2.3 get

 

    # get如果查询条件不存在,就报错,不建议使用
    # 结果是一个具体的对象
    # 几乎不用
    ret1 = models.Person.objects.get(id=2)
    print(ret1)

  

2.4 filter

    # filter
    # QuerySet对象 继承了一个list,所有list的特性
    # 如果结果不存在,则返回一个空的querySet,不会报错
    # 根据索引去单个数据
    ret2 = models.Person.objects.filter(id=2)
    print(ret2)

    # 从QuerySet种一个具体的对象
    ret3 = models.Person.objects.filter(id=2)[0]
    print(ret3)

  

2.5 exclude

    # exclude
    # 排除条件
    # 返回QuerySet
    ret4 = models.Person.objects.exclude(id=2)
    print(ret4)

  

2.6 values

    # values
    # 具体去某些字段
    # 返回指定字段的querySet,默认查询所有字段
    ret = models.Person.objects.values('name','birthday')
    print(ret)

2.7 values_list

    # values_list
    # 返回由值组成的元祖(querySet)
    ret = models.Person.objects.values_list('name','birthday')
    print(ret)

2.8 order_by

    # order_by

    # 按照字段排序

    ret = models.Person.objects.order_by('birthday')
    print(ret)

    ret = models.Person.objects.order_by('age')
    print(ret)

  

2.9 reverse

    # reverse
    # 对一个有序querySet进行反转(只能对有序的querySet进行反转,这个要注意)
    ret = models.Person.objects.all().order_by('age').reverse()
    print(ret)

2.10 distinct

 

2.11 count

    # count 取querySet数量

    ret = models.Person.objects.all().count()
    print(ret)

2.12 first

    # first 返回querySet中第一个对象

    ret = models.Person.objects.all().first()
    print(ret)

  

2.13 last

    # last 返回querySet中最后一个对象

    ret = models.Person.objects.last()
    print(ret)

2.14 exist

    # exist
    # 判断是否有数据
    ret = models.Person.objects.filter(id=1).exists()
    print(ret)

  

三 单表查询双下划线

posted @ 2019-08-13 11:13  择一事,终一生  阅读(117)  评论(0)    收藏  举报