Django之ORM

Posted echo2019

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django之ORM相关的知识,希望对你有一定的参考价值。

一、创建表之前的准备工作

一、自己创建数据库

二、在settings里面配置mysql数据库链接

  sqlite3------改为mysql

# 修改django默认的数据库的sqlite3为mysql
DATABASES = {
    default: {
            ENGINE: django.db.backends.mysql, #通过这个去链接mysql
            NAME: djangotsgl,
            USER:root,
            PASSWORD:123456,
            HOST:localhost,
            PORT:3306,
        }
    }

三、根目录的 __init___中,添加

import pymysql
pymysql.install_as_MySQLdb()

四、创建数据库表

class Class(models.Model):
    caption = models.CharField(max_length=64)
    grade = models.ForeignKey(ClassGrade, on_delete=models.CASCADE) #一对多

class Student(models.Model):
    sname = models.CharField(max_length=32)
    gender = models.CharField(max_length=32)
    cls = models.ForeignKey(Class, on_delete=models.CASCADE)

class Teacher(models.Model):
    cls = models.ManyToManyField("Class")
    tname = models.CharField(max_length=32)

class Course(models.Model):
    cname = models.CharField(max_length=64)
    teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE)

class Score(models.Model):
    student = models.ForeignKey("Student", on_delete=models.CASCADE)
    course = models.ForeignKey("Course", on_delete=models.CASCADE)
    score = models.IntegerField()

class ClassGrade(models.Model):
    gname = models.CharField(max_length=64)

 执行命令创建:(需要记住的!!!)

python3 manage.py makemigrations   创建脚本
python3 manage.py migrate   迁移

五、查看数据库执行的sql语句(加在settings.py)

查看数据库执行代码
LOGGING = {
    version: 1,
    disable_existing_loggers: False,
    handlers: {
        console:{
            level:DEBUG,
            class:logging.StreamHandler,
        },
    },
    loggers: {
        django.db.backends: {
            handlers: [console],
            propagate: True,
            level:DEBUG,
        },
    }
}

 

django之数据库表的单表查询

一、添加表记录

对于单表有两种方式

Frank_obj = models.Student(name ="海东",course="python",birth="2000-9-9",fenshu=80)
    Frank_obj.save()
    # 方式二:
    models.Student.objects.create(name ="海燕",course="python",birth="1995-5-9",fenshu=88)

二、查询表记录

# 查询相关API
    # 1、all():查看所有
    student_obj = models.Student.objects.all()
    print(student_obj)  #打印的结果是QuerySet集合
    # 2、filter():可以实现且关系,但是或关系需要借助Q查询实现。。。
    #              查不到的时候不会报错
    print(models.Student.objects.filter(name="Frank"))  #查看名字是Frank的
    print(models.Student.objects.filter(name="Frank",fenshu=80))  #查看名字是Frank的并且分数是80的
    # 3、get():如果找不到就会报错,如果有多个值,也会报错,只能拿有一个值的
    print(models.Student.objects.get(name="Frank"))  #拿到的是model对象
    print(models.Student.objects.get(nid=2))  #拿到的是model对象
    # 4、exclude():排除条件
    print( models.Student.objects.exclude(name="海东")) #查看除了名字是海东的信息
    # 5、values():是QuerySet的一个方法 (吧对象转换成字典的形式了,)
    print(models.Student.objects.filter(name="海东").values("nid","course")) #查看名字为海东的编号和课程
    #打印结果:<QuerySet [{‘nid‘: 2, ‘course‘: ‘python‘}, {‘nid‘: 24, ‘course‘: ‘python‘}]>
    # 6、values_list():是queryset的一个方法 (吧对象转成元组的形式了)
    print(models.Student.objects.filter(name="海东").values_list("nid", "course"))
    #打印结果:< QuerySet[(2, ‘python‘), (24, ‘python‘)] >
    # 7、order_by():排序
    print(models.Student.objects.all().order_by("fenshu"))
    # 8、reverse():倒序
    print(models.Student.objects.all().reverse())
    # 9、distinct():去重(只要结果里面有重复的)
    print(models.Student.objects.filter(course="python").values("fenshu").distinct())
    # 10、count():查看有几条记录
    print(models.Student.objects.filter(name="海东").count())

    # 11、first()
    # 12、last()
    return render(request,"test.html",{"student_obj":student_obj})
    # 13、esits:查看有没有记录,如果有返回True,没有返回False
        #         并不需要判断所有的数据,
        # if models.Book.objects.all().exists():

双下方法之单表查询

Book.objects.filter(price__in=[100,200,300])
Book.objects.filter(price__gt=100)
Book.objects.filter(price__lt=100)
Book.objects.filter(price__range=[100,200])
Book.objects.filter(title__contains="")
Book.objects.filter(title__icontains="python")  # 不区分大小写
Book.objects.filter(title__startswith="")
Book.objects.filter(pub_date__year=2018)

 

以上是关于Django之ORM的主要内容,如果未能解决你的问题,请参考以下文章

Django之ORM

(Django)气流中的 ORM - 有可能吗?

Django之ORM框架的使用

Django 基础 之ORM简介与单表操作

九Django之ORM

Django(MTV)之 M:ORM