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)的对象数量