zoukankan      html  css  js  c++  java
  • Django- ORM操作

    python生成requirements.txt项目依赖环境

    进入python 项目目录下,执行命令

    pip freeze > requirements.txt
    

    生成的requirements.txt 里面就记录了当前所有已经安装的依赖包以及版本号

    然后将生成的requirements.txt 拷贝到需要安装同样依赖环境的服务器上

    最后执行命令

    pip install -r requirements.txt
    

    就可以将所有依赖一次安装完成

    django中所有的命令

    下载django
    
    pip install django==1.11.25 -i 源
    
    创建django项目
    
    django-admin startproject 项目名
    
    启动项目
    
    切换到项目目录下
    
    python manage.py runserver # 127.0.0.1:8000
    
    python manage.py runserver 80 # 127.0.0.1:80
    
    python manage.py runserver 0.0.0.0::80 # 0.0.0.0::80
    
    创建app
    
    python manage.py startapp app名称
    
    数据库迁移的命令
    
    python manage.py makemigrations # 检测已经注册app下的models变更记录
    
    python manage.py migrate # 将变更记录同步到数据库中
    

    request

    request.POST    #  POST提交的数据 {}    urlencode编码
    request.GET     #   url上携带的参数  ?id=1  {id:1}
    request.method  #  请求方法  GET POST
    request.path_info  # 路径信息  不包含IP和端口 也不包含查询参数
    request.FILES   # 上传的文件 enctype='form-data'
    request.session  # {}  session 
    request.COOKIES  # cookie  
    request.META   # 请求头的信息  HTTP_  小写——》  大写  - ——》 _
    request.body  # 请求体  原始数据
    
    request.get_full_path()  #  完整的路径信息 不包含IP和端口 包含查询参数
    request.is_ajax()  # 是否是ajax请求
    request.get_signed_cookie(key,salt,defalut='')
    

    response

    HttpResponse('字符串')   #  字符串
    JsonResponse({})   JsonResponse([],safe=False) 
    render(request,'模板文件的路径',{})   # 返回页面 已经替换好了
    redirect('地址或者URLname')   # 重定向  响应头Location:地址 301 302 
    TemplateResponse(request,'模板文件的路径',{})  # 后续在调用render方式进行渲染
    
    

    ORM

    正向查询

    有关联关系的哪一方成为正向--也就是多的哪一方 -- 属性查询
    

    反向查询

    没有关联关系的哪一方成为反向--也就是一的哪一方 -- 表名小写
    

    正向和反向查询
    正向 ----> 关联字段在当前表中,从当前表向外查叫正向
    反向 —> 关联字段不在当前表中,当当前表向外查叫反向
    正向通过字段,反向通过表名查

    一对一 OneToOneField

    # 一个文章详情表一对一关联文章表,相当于Foreignkey 加unique
    class Article(models.Model):
    	nid = models.AutoField(primary_key=True)
    	desc = models.CharField(max_length=255)
    	
    class ArticleDetail(models.Model):
        """
        文章详情表
        """
        nid = models.AutoField(primary_key=True)
        content = models.TextField()
        article = models.OneToOneField(to="Article", to_field="nid",on_delete=models.DO_NOTHING)
    

    正向:

    1、基于对象:obj.(外键).属性

    ArticleDetail_obj = models.ArticleDetail.objects.filter(pk=pk).first()
    ArticleDetail_obj.article.desc
    

    2、基于字段跨表查询:外键__属性

    models.ArticleDetail.objects.filter(pk=2).values("article__desc")
    

    反向:从详情查文章

    1、基于对象:obj.(表名小写).属性

    article_obj = models.Article.objects.filter(pk=pk).first()
    article_obj.articledetail.content
    

    2、基于字段跨表查询:表名小写__属性

    models.Article.objects.filter(id=1).values('articledetail__content')
    

    一对多 ForeignKey

    book – > publish :一个出版社有多个书

    class Publish(models.Model):
        nid = models.AutoField(primary_key=True)
        name=models.CharField( max_length=32)
    
    class Book(models.Model):
        nid = models.AutoField(primary_key=True)
        title = models.CharField( max_length=32)
        # 与Publish建立一对多的关系
    	publish=models.ForeignKey(to="Publish",to_field="nid",on_delete=models.CASCADE)
    
    

    正向

    1、基于字段:obj.(外键).属性

    book_obj = models.Book.objects.filter(title='红楼梦').first()
    book_obj.publish.name
    

    反向:obj.(表名小写_set).all()
    1、set查询

    publish_obj=models.Publish.objects.filter(name="教育").first()
    books = publish_obj.book_set.all()
    for book in books:
    	print(book.title)
    

    多对多 ManyToManyField

    class Author(models.Model):
        nid = models.AutoField(primary_key=True)
        name=models.CharField( max_length=32)
        age=models.IntegerField()
    
        # 与AuthorDetail建立一对一的关系
        authorDetail=models.OneToOneField(to="AuthorDetail",on_delete=models.CASCADE)
    
    class Author(models.Model):
        nid = models.AutoField(primary_key=True)
        name=models.CharField( max_length=32)
        age=models.IntegerField()
        
    class Book(models.Model):
        nid = models.AutoField(primary_key=True)
        title = models.CharField(max_length=32)
    
        # 与Author表建立多对多的关系,ManyToManyField可以建在两个模型中的任意一个,自动创建第三张表
        authors=models.ManyToManyField(to='Author',)
    
    

    正向:

    1、基于字段:obj.(外键).all()

    book_obj = models.Book.objects.filter(title="python教程").first()
    authors = book_obj.authors.all()
    for author in authors:
    	print(author.name,author.age)
    

    反向:obj.(表名小写_set).all()
    1、set查询

    author_obj = models.Author.objects.filter(name="moke").first()
    books = author_obj.book_set.all()
    for book in books:
    	print(book.title)
    

    2、related_name查询

    author_obj.related_name.all()
    

    常用字段

    AutoField       自增  primary_key = True主键
    
    IntegerField    整形 -21亿  - 21亿
    
    BooleanField     布尔值类型
    
    NullBooleanField  可以为空的布尔值
    
    CharField      字符串
    
    TextField      文本类型
    
    DateTimeField   日期+加时间
    
    DateField     日期格式
        
    TimeField     时间格式
    
    FloatField    浮点型
    
    DecimalField(max_difits=6,decimal_piaces=3)   十进制小数
    

    字段参数

    null = True    数据库中该字段可以为空
    
    black = True    用户输入可以为空
    
    default         默认值
    
    db_index=True 索引
    
    unique    唯一约束
    
    verbose_name   显示的名称
    
    choices   可选择的参数
    

    必知必会十三条

    返回对象列表  QuerySet
    all()      所有的对象
    filter()    获取满足条件的所有对象
    exclude()   获取不满足条件的所有对象
    order_by()   排序   - 
    reverse()   反转
    values()    [ {}  ]
    values_list()    [ ()  ]
    distinct()   去重  不能按照字段去重
    
    返回对象
    get()    获取有且唯一的对象
    first()
    last()
    
    返回数字
    count
    
    返回布尔值
    exists() 
    

    单表的双下划线

    字段__条件
    __gt   大于
    __gte   大于等于
    __lt  小于
    __lte   小于等于
    __in= []    成员判断
    __range = [3,6]  范围  3-6
    
    __contains =''    包含   like
    __icontains =''   忽略大小写
    
    __startswith =''   以什么开头
    __istartswith =''   以什么开头
    
    
    __endswith =''   以什么结尾
    __endswith =''   以什么结尾
    
    
    __year ='2019'  
    
    __isnull = True   字段值为null 
    
  • 相关阅读:
    启动redis时报错:FATAL CONFIG FILE ERROR :Bad directive or wrong number of arguments
    转载Redis的三个框架:Jedis,Redisson,Lettuce
    转载Dubbo详解(一):Dubbo介绍和SpringBoot整合Dubbo+ZooKeeper
    Redisson如何实现类似incr的自增操作
    转载解决 com.alibaba.fastjson.JSONException: autoType is not support.
    转载springboot+mybatis实现数据库的读写分离
    转载dubbo服务被重复调用三次的原因
    js中实现函数防抖跟函数节流
    网站项目后台的目录命名为admin后,网页莫名其妙的变样了
    createreactapp不支持less的解决方式
  • 原文地址:https://www.cnblogs.com/zgboy/p/14606332.html
Copyright © 2011-2022 走看看