首页 > 其他 > 详细

orm回忆_01

时间:2021-01-10 00:52:39      阅读:36      评论:0      收藏:0      [点我收藏+]

引子:

  目前主要做测试工作,好久没碰过django的orm了,今天有空了,复习一下

代码:

  models.py

from django.db import models

# Create your models here.


class Publisher(models.Model):
    id=models.AutoField(primary_key=True)
    name=models.CharField(max_length=32)

class Book(models.Model):
    id=models.AutoField(primary_key=True)
    title=models.CharField(max_length=32)
    # 外键 一对一  出版社和 书
    publisher=models.ForeignKey(to="Publisher")


class Author(models.Model):
    id=models.AutoField(primary_key=True)
    name=models.CharField(max_length=32)
    # 外键  多对多  作者和书
    books=models.ManyToManyField(to="Book")

  views.py

import os,django

os.environ.setdefault("DJANGO_SETTINGS_MODULE","day_orm.settings")
django.setup()

from django.shortcuts import render

# Create your views here.
from app01 import models





def orm_apply(request):
    """
    复习 orm  增删改查
    建表命令
        python3 manage.py makemigrations
        python3 manage.py migrate
    :param request:
    :return:
    """
    # 增加
    models.Publisher.objects.create(name="青龙")

    # 查 使用get 一般 知道目标数据是唯一的  如果有多条 默认返回第一条
    models.Publisher.objects.get(id=1)
    models.Publisher.objects.get(name="青龙")

    # 删除
    obj=models.Publisher.objects.get(id=1).delete()

    #修改
    orm_obj=models.Publisher.objects.get(id=2)
    orm_obj.name="白虎22"
    orm_obj.save()

def orm_forkey(request):
    """
    复习 外键的增删改查
    :param request:
    :return:
    """
    # 增删改同上

    # 查
    book_obj=models.Book.objects.get(id=1)

    # publisher_obj拿到的是 和书 关联的 Publisher的对象
    publisher_obj=book_obj.publisher

    # 第一种拿到 publisher_id 的方法
    publisher_id_1=publisher_obj.id
    publisher_name = publisher_obj.name

    # 第二种拿到 publisher_id 的方法
    # 在数据库中 实际生成的 数据 并没有publisher_id 这是因为
    # 在Book类中 publisher=models.ForeignKey(to="Publisher") 判断如果是外间 就会生成一个publisher_id
    publisher_id_2=book_obj.publisher_id


    # 多对多关系
    # books=models.ManyToManyField(to="Book")  在数据库中 orm 会自动创建第三张表 进行关联
    #
    author_obj=models.Author.objects.get(id=1)
    author_obj.books.all()   # 拿到了 所有的 和作者关联的 书的对象

    # 给作者绑定多本书
    author_obj.books.set([1,2,3])  # 书的主键id


#
def attr_local():
    """
    locals globals  通常配合 反射使用
    :return:
    """
    # locals 返回当前 作用域 局部变量 dict
    print(locals())
    # globals 返回当前模块 所有变量   dict
    print(globals())


if __name__ == ‘__main__‘:
    print(attr_local())
    #print(locals())

  

orm回忆_01

原文:https://www.cnblogs.com/yuan-x/p/14257136.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!