Django中的ORM操作练习

1.准备Django1.11.xx环境->2.在manage.py同级中创建xx.py文件

2.在创建的xx.py文件中添加以下操作配置Django项目和变量信息

import os

if __name__ == '__main__': # 运行当前环境才会执行后面的操作
# 加载Django项目的配置信息
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
# 导入Django,并启动Django项目
import django
django.setup()
# 导入创建的APP中的models
from app01 import models

3.在settings.py文件的最下面添加以下内容后可查看ORM语句的原生SQL

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'propagate': True,
'level': 'DEBUG',
},
}
}

4.在model.py文件中建数据表->1.python manage.py makemigrations->2.python manage.py migrate

class School(models.Model):
id = models.AutoField(primary_key=True) # 自增的ID主键
# 创建一个varchar(64)的唯一的不为空的字段
title = models.CharField(max_length=64, null=False, unique=True)
   def __str__(self):
    # 返回字符串的友好方式
    return self.title


class Student(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32, null=False, unique=True)
school = models.ForeignKey(
        to="School", # 创建一对多外键,一个学校可以有多个学生
        on_delete=models.CASCADE, # 删除处理数据时,默认的相关联操作
        related_name="students",      # 指定反向查询的条件代替student_set
        related_query_name="xx",      # 基于双下划线QuerySet对象代替表名
        null=True               # 允许为空
)    


class Teacher(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32, null=False, unique=True)
book = models.ManyToManyField(to="Student") # 创建多对多关联关系,一个老师可以有多个学生,一个学生也可以有多个老师
  
    # ordering  默认排序
class Meta:
ordering = ("id",)


class FixedCharField(models.Field):
"""
自定义的char类型的字段类
"""
def __init__(self, max_length, *args, **kwargs):
self.max_length = max_length
super(FixedCharField, self).__init__(max_length=max_length, *args, **kwargs)

def db_type(self, connection):
"""
限定生成数据库表的字段类型为char,长度为max_length指定的值
"""
return 'char(%s)' % self.max_length

5.->ORM常用方法

1.返回QuerySet对象的方法

all()                                查询所有结果

filter()                             包含了与所给筛选条件相匹配的对象,没有或者超出不报错

exclude()        排除了与所给筛选条件不匹配的对象

order_by()                      对查询结果排序

reverse()         查询结果反向排序

distinct()                         从返回结果中剔除重复纪录

2.特殊的QuerySet

values()                          返回一个可迭代的字典序列

values_list()                    返回一个可迭代的元祖序列

3.返回具体对象的

get()                                返回与所给筛选条件相匹配的一个对象,没有或者超出就报错

first()                               返回第一条记录

last()                                返回最后一条记录

4.返回布尔值的方法有:

exists()                            如果QuerySet包含数据,就返回True,否则返回False

5.返回数字的方法有

count()               返回数据库中匹配查询(QuerySet)的对象数量

原文地址:https://www.cnblogs.com/Guishuzhe/p/9524790.html