zoukankan      html  css  js  c++  java
  • ORM2

    1.ORM是什么?

      1.对象关系映射

        类   -->   数据表

        对象 -->    数据行

        属性 -->   字段

    2.Django中如何连接数据库.

      1.手动建立一个新的数据库

      2.告诉Django要连接那个数据

        在setting.py文件下连接数据库:

        DATABASES ={

          'default':{

            'ENDING':'django.db.backends.mysql',

            'NAME':'db2',

            'HOST':'127.0.0.1'

            'PORT':3306

            'USER':'root'

            'PASSWORD':'123'  

          }}

      3.在__init__.py下导入pymysql,告诉Django用什么模块连接MySQL

        1.import pymysql

        2.pymysql.install_as_MySQLdb()

      4.在app下的models.py文件中建立类

        类一定要继承models.Model

      5.执行两个命令:

        1.python manage.py makemigrations  -->   查看model.py文件中的内容是否 有变动

        2.python manage.py migrate      -->  把改动的记录翻译成SQL语句,并执行

    3.单表的增删改查

      1.查询

        Class.objects.get(条件=值)返回一个对象,查不到,或查到多条都会报错,不推荐使用

        Class.objects.filter(条件=值)

           Class.objects.all()

      2.删.

        Class.objects.get(条件=值).delete()

        Class.objects.get(条件=值).delete()

      3.增

        Class.objects.create(name='值')

      4.改.

        1.基于对象的修改(不推荐)

          class_obj = Class.objects.get(条件=值)

          class_obj.name = '新值'

          class_obj.save()

        2.基于QuerySet的update修改

          Class.objects.filter(条件=值).uodate(name='新值')

    4.外键:

      1.一对多建立连接:student = models.ForeignKey(to='Class',on_delete=models.CASCADE)

        1.查询:

          student_obj.student -->ORM中帮我们实现的,直接找到和班级关联的班级对象

          student_obj.student_id  -->数据库中真正保存的字段

        2.外键的修改

          1.student_obj.student = student_obj

            student_obj.save()

          2.student_obj.student_id = 1

            student_obj.save()

      2.多对多建立关联:student = models.ManyToManyField(to='表')

        1.查询:author_obj.book.all()

        2.添加:author_obj.book.add(1,2)

        3.修改:author_obj.book.set([1,2])

        4.删除:author_obj.book.clear()

    5.常用字段:

      1.AutoField()  *****

      2.IntegerField()  *****

      3.BooleanField

      4.CharField()  *****

      5.TextField

      6.EmailField

      7.GenericIPAddressField

      8.UUIDField()  *****

      9.FieldField

      10.ImageField

      11.DateTimeField  *****

      12.DateField  *****

      13.TimeField

      14.FloatField

      15.DecimalFeild  *****

      16.SmallIntegerField

      17.PositiveSmallIntegerField

      18.PositiveIntegerField

      19.BigIntegerField

    6.常用字段的参数

      1.  null=True     数据库中字段是否可以为空
      2.  default='默认值'
      3.  unique=True 唯一
      4.  primary_key=True 主键     数据库中字段是否为主键
      5.  max_length='数字'
      6.  auto_now=True -->自动把最后更新想时间保存
      7.  auto_now_add=True -->自动把创建时间保存
      8.  db_index=True      -->把数据库中给当前字段创建索引
      9.  db_column='新列名'        数据库中字段的列名
      10.  chioce=(('1,男'),('2,女'),('3,人妖')

      11.  unique_for_date  数据库中字段[日期]部分是否可以建立唯一索引

      12.  unique_for_month  数据库中字段[月]部分是否可以建立唯一索引

      13.  unique_for_year  数据库中字段[年]部分是否可以建立唯一索引

      

      DatetimeField和Datefield独有:

        auto_now_add  -->当前数据的创建时间

        auto_now    --> 当前数据的最后修改时间

    7.带choice参数字段

      1.get_字段名_display()

    8.建表的云信息

      class Meta:

        db_table = '表名'

        unique_together = (('ip','port'),)

        index_together = (("pub_date","deadline"),)

    9.必知必会13条:

      1.返回QuerySet列表类型的

        1.filter()

        2.all()

        3.exclude()

        4.order_by()

        5.reverse()

        6.distinct()

        

        7.values()

        8.values_list()

      2.返回具体对象

        1.get()

        2.first()

        3.last()

      3.返回布尔值

        1.exists()

      4.返回数字的

        1.count()

    10.万能的双下划线:

      

    models.Tb1.objects.filter(id__lt=10, id__gt=1)   # 获取id大于1 且 小于10的值
     
    models.Tb1.objects.filter(id__in=[11, 22, 33])   # 获取id等于11、22、33的数据
    models.Tb1.objects.exclude(id__in=[11, 22, 33])  # not in
     
    models.Tb1.objects.filter(name__contains="ven")  # 获取name字段包含"ven"的
    models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感
     
    models.Tb1.objects.filter(id__range=[1, 3])      # id范围是1到3的,等价于SQL的bettwen and
     
    类似的还有:startswith,istartswith, endswith, iendswith 
    
    date字段还可以:
    models.Class.objects.filter(first_day__year=2017)
    

    修改管理器(models.py)
    导入新的包:from django.db import models
    进行模糊查询
    开始进行查找前我们先来认识filter()方法。
    这是一个过滤器方法用于过滤掉不符合条件的元素。
    值得一提的是其内自带方法函数的引用方式为‘__方法名称’。
    __exact 精确等于 like ‘aaa’
    __iexact 精确等于 忽略大小写 ilike ‘aaa’
    __contains 包含 like ‘%aaa%’
    __icontains 包含 忽略大小写 ilike ‘%aaa%’,但是对于sqlite来说,contains的作用效果等同于icontains。
    __gt 大于
    __gte 大于等于
    __lt 小于
    __lte 小于等于
    __in 存在于一个list范围内
    __startswith 以…开头
    __istartswith 以…开头 忽略大小写
    __endswith 以…结尾
    __iendswith 以…结尾,忽略大小写
    __range 在…范围内
    __year 日期字段的年份
    __month 日期字段的月份
    __day 日期字段的日
    __isnull=True/False
    举几个例子:

    obj1 = UserInfo.objects.filter(user_name__contains='王')#以‘王’开头的user__name
    obj2 = UserInfo.objects.filter(user_name__endswith='王')#以‘王’结尾的user__name
    obj3 = UserInfo.objects.filter(id__gte=5)#ID大于等于5的
    obj5 = UserInfo.objects.filter(id__exact=5)#id等于5的
    obj6 = UserInfo.objects.filter(id__in=[1,3,5])#id等于1,3,5,的
    1
    2
    3
    4
    5
    exclude方法,排除选项。

    obj8 = UserInfo.objects.filter(password='123456',id__gt=2).exclude(phone=188)
    #找到符合filter的内容后排除phone等于188的,它的另一种写法为
    from django.db.models import Q
    obj = UserInfo.objects.filter(Q(password='123456') & Q(id__gt=2) & ~Q(phone=188))
    1
    2
    3
    4
    计算和和最大值:

    from django.db.models import Sum,Max,Min
    obj = UserInfo.objects.aggregate(Sum('id'))
    obj = UserInfo.objects.aggregate(Max('id'))
    obj = UserInfo.objects.aggregate(Min('id'))
    ---------------------
    作者:dreamingcrazy
    来源:CSDN
    原文:https://blog.csdn.net/dreamingcrazy/article/details/82595700
    版权声明:本文为博主原创文章,转载请附上博文链接!

        

          

         

  • 相关阅读:
    web安全——代理(nginx)
    2016年3-7月书单推荐
    web安全——系统(Linux)
    web安全——防火墙
    web安全——简介
    系统安全扫描工具(appscan)的扫描类型小记
    知识管理,让生活更美好
    亚马逊如何变成 SOA(面向服务的架构)
    徐小平:关了公司以后,我有这些话要对你说
    网易味央第二座猪场落户江西 面积超过3300亩
  • 原文地址:https://www.cnblogs.com/lijinming110/p/9916044.html
Copyright © 2011-2022 走看看