zoukankan      html  css  js  c++  java
  • django 基础进阶ORM COOKIE

    ORM:

    class Book(models.Model):
     title=models.CharFiled(max_length=32)

      类-----------------表    #  Book------- app01_book
            属性变量-----------字段  #  title------ title
            属性对象-----------约束     #  models.CharFiled(max_length=32)
            类实例对象---------表记录

    单表操作
    model的元类信息:

    Book_meta.verbose_name "书籍" 用来在django中标识

    Book_meta.model_name book 看表名小写

    Book._meta.app_label 'app01' 看项目名称

     class Book(models.Model):
                        title=models.CharField(max_length=32,verbose_name="书籍名称")


                         def __str__(self):
                            return self.title
                         class Meta:
                                app_label="APP01"
                                db_table="app01book"
                                unique_together=["title","price"] 联合唯一
                                verbose_name="书籍"
                                ordering=["price"]   

     
               class Book(models.Model):
                         id=models.AutoField(primary_key=True)
                         title=models.CharField(max_length=32)
                         state=models.BooleanField()
                         pub_date=models.DateField()
                         price=models.DecimalField(max_digits=8,decimal_places=2)
                         publish=models.CharField(max_length=32)
                               
               
               更多参数:
                        (1)null
     
                        如果为True,Django 将用NULL 来在数据库中存储空值。 默认值是 False.
                        
                            blank
                        
                        如果为True,该字段允许不填。默认为False。
                        要注意,这与 null 不同。null纯粹是数据库范畴的,而 blank 是数据验证范畴的。
                        如果一个字段的blank=True,表单的验证将允许该字段是空值。如果字段的blank=False,该字段就是必填的。
                        
                        (2)default
                        
                        字段的默认值。可以是一个值或者可调用对象。如果可调用 ,每有新对象被创建它都会被调用。
                        
                        (3)primary_key
                        
                        如果为True,那么这个字段就是模型的主键。如果你没有指定任何一个字段的primary_key=True,
                        Django 就会自动添加一个IntegerField字段做为主键,所以除非你想覆盖默认的主键行为,
                        否则没必要设置任何一个字段的primary_key=True。
                        
                        (4)unique
                        
                        如果该值设置为 True, 这个数据字段的值在整张表中必须是唯一的
                        
                        (5)choices
                        由二元组组成的一个可迭代对象(例如,列表或元组),用来给字段提供选择项。 如果设置了choices ,默认的表单将是一个选择框而不是标准的文本框,<br>而且这个选择框的选项就是choices 中的选项。
                

                数据库配置:
                    DATABASES = {
                        'default': {
                            'ENGINE': 'django.db.backends.mysql',
                            'NAME':'bms',           # 要连接的数据库,连接前需要创建好
                            'USER':'root',        # 连接数据库的用户名
                            'PASSWORD':'',        # 连接数据库的密码
                            'HOST':'127.0.0.1',       # 连接主机,默认本级
                            'PORT':3306            #  端口 默认3306
                        },
                        
                        'app01': {
                            'ENGINE': 'django.db.backends.mysql',
                            'NAME':'bms',           # 要连接的数据库,连接前需要创建好
                            'USER':'root',        # 连接数据库的用户名
                            'PASSWORD':'',        # 连接数据库的密码
                            'HOST':'127.0.0.1',       # 连接主机,默认本级
                            'PORT':3306            #  端口 默认3306
                        },
                        
                    }
                
                针对每一个注册app下的models.py创建对应的表结构            
                    python manage.py makemigrations
                    python manage.py migrate

     添加记录:
                    book_obj=Book.objects.create(title="python葵花宝典",state=True,price=100,publish="苹果出版社",pub_date="2012-12-12")
                    
                    book_obj=Book(title="python葵花宝典",state=True,price=100,publish="苹果出版社",pub_date="2012-12-12")
                    book_obj.save()
                 
               查询表纪录:
                    <1> all():                  查询所有结果
     
                    <2> filter(**kwargs):       它包含了与所给筛选条件相匹配的对象
                      
                    <3> get(**kwargs):          返回与所给筛选条件相匹配的对象,返回结果有且只有一个,
                                                如果符合筛选条件的对象超过一个或者没有都会抛出错误。
                      
                    <4> exclude(**kwargs):      它包含了与所给筛选条件不匹配的对象
                    
                    <5> order_by(*field):       对查询结果排序
                      
                    <6> reverse():              对查询结果反向排序
                      
                    <8> count():                返回数据库中匹配查询(QuerySet)的对象数量。
                      
                    <9> first():                返回第一条记录
                      
                    <10> last():                返回最后一条记录
                      
                    <11> exists():              如果QuerySet包含数据,就返回True,否则返回False

    ,<12> values  

    返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列
                                                model的实例化对象,而是一个可迭代的字典序列

    Book.objects.filter(price__gt=100).values("title","price")

    queryset=[]

    for obj in Book.objects.filter(price__gt=100):

    queryset.qppend({

    "title:obj.title,

    price:obj.price"})

    <13> values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列


                                                    Book.objects.filter(price__gt=100).values("title","price")
                                                '''
                                                queryset=[]
                                                for obj in Book.objects.filter(price__gt=100):
                                                    queryset.append((
                                                        obj.title,
                                                        obj.price
                                                    
                                                    ))

        <14> distinct():            从返回结果中剔除重复纪录   
                                               


                基于双下划线的模糊查询
                    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="python") 在里面
                    Book.objects.filter(title__icontains="python") 不区分大小写在里面
                    Book.objects.filter(title__startswith="py")
                    Book.objects.filter(pub_date__year=2012)
                    Book.objects.filter(pub_date__year__gt=2012)
                
    删除表纪录
                    Book.objects.filter(price__in=[100,200,300]).delete()  quertset
                    Book.objects.get(pk=1).delete()  model对象
                     
                
                修改表纪录
                    # 方式1
                    Book.objects.filter(title__startswith="py").update(price=120)  quertset
                    # 方式2
                    book=Book.objects.filter(title__startswith="py").first()
                    book.price=1000
                    book.save()
                    
                               

  • 相关阅读:
    Truevision3D
    Django模版渲染后在浏览器中出现空行的问题解决<转>
    python日期函数<转>
    web应用程序概述
    汉诺塔(hanoi)递归实现
    django1.4配置静态文件路径
    服务器端的状态维护
    树的存储结构表示
    WEB服务器端应用程序开发相关概念
    HTTP消息
  • 原文地址:https://www.cnblogs.com/zhangqing979797/p/10009023.html
Copyright © 2011-2022 走看看