zoukankan      html  css  js  c++  java
  • python django day 5 database 1

    from django.db import models
     
     
    class Blog(models.Model):
        name = models.CharField(max_length=100)
        tagline = models.TextField()
     
        def __unicode__(self):  # __str__ on Python 3
            return self.name
     
    class Author(models.Model):
        name = models.CharField(max_length=50)
        email = models.EmailField()
     
        def __unicode__(self):  # __str__ on Python 3
            return self.name
     
    class Entry(models.Model):
        blog = models.ForeignKey(Blog)
        headline = models.CharField(max_length=255)
        body_text = models.TextField()
        pub_date = models.DateField()
        mod_date = models.DateField()
        authors = models.ManyToManyField(Author)
        n_comments = models.IntegerField()
        n_pingbacks = models.IntegerField()
        rating = models.IntegerField()
     
        def __unicode__(self):  # __str__ on Python 3
            return self.headline
    QuerySet 创建对象的方法
    >>> from blog.models import Blog
    >>> b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.')
    >>> b.save()
     
    总之,一共有四种方法
    # 方法 1
    Author.objects.create(name="WeizhongTu", email="tuweizhong@163.com")
     
    # 方法 2
    twz = Author(name="WeizhongTu", email="tuweizhong@163.com")
    twz.save()
     
    # 方法 3
    twz = Author()
    twz.name="WeizhongTu"
    twz.email="tuweizhong@163.com"
    twz.save()
     
    # 方法 4,首先尝试获取,不存在就创建,可以防止重复
    Author.objects.get_or_create(name="WeizhongTu", email="tuweizhong@163.com")
    # 返回值(object, True/False)
    
    
    
    Person.objects.all() # 查询所有
    Person.objects.all()[:10] 切片操作,获取10个人,不支持负索引,切片可以节约内存,不支持负索引,后面有相应解决办法,第7条
    Person.objects.get(name="WeizhongTu") # 名称为 WeizhongTu 的一条,多条会报错
     
    get是用来获取一个对象的,如果需要获取满足条件的一些人,就要用到filter
    Person.objects.filter(name="abc") # 等于Person.objects.filter(name__exact="abc") 名称严格等于 "abc" 的人
    Person.objects.filter(name__iexact="abc") # 名称为 abc 但是不区分大小写,可以找到 ABC, Abc, aBC,这些都符合条件
     
    Person.objects.filter(name__contains="abc") # 名称中包含 "abc"的人
    Person.objects.filter(name__icontains="abc") #名称中包含 "abc",且abc不区分大小写
     
    Person.objects.filter(name__regex="^abc") # 正则表达式查询
    Person.objects.filter(name__iregex="^abc")# 正则表达式不区分大小写
     
    # filter是找出满足条件的,当然也有排除符合某条件的
    Person.objects.exclude(name__contains="WZ") # 排除包含 WZ 的Person对象
    Person.objects.filter(name__contains="abc").exclude(age=23) # 找出名称含有abc, 但是排除年龄是23岁的
    Person.objects.filter(name__contains="abc").delete() # 删除 名称中包含 "abc"的人
     
    如果写成 
    
    people = Person.objects.filter(name__contains="abc")
    people.delete()
    效果也是一样的,Django实际只执行一条 SQL 语句。
    
    Person.objects.filter(name__contains="abc").update(name='xxx') # 名称中包含 "abc"的人 都改成 xxx
    Person.objects.all().delete() # 删除所有 Person 记录
    
    es = Entry.objects.all()
    for e in es:
        print(e.headline)
    
    >>> import pickle
    >>> query = pickle.loads(s)     # Assuming 's' is the pickled string.
    >>> qs = MyModel.objects.all()
    >>> qs.query = query            # Restore the original 'query'.
    
    
    Author.objects.all().order_by('name')
    Author.objects.all().order_by('-name') # 在 column name 前加一个负号,可以实现倒序
    
    Author.objects.filter(name__contains="WeizhongTu").filter(email="tuweizhong@163.com")
    Author.objects.filter(name__contains="Wei").exclude(email="tuweizhong@163.com")
     
    # 找出名称含有abc, 但是排除年龄是23岁的
    Person.objects.filter(name__contains="abc").exclude(age=23)
    
    # 1. 使用 reverse() 解决
    Person.objects.all().reverse()[:2] # 最后两条
    Person.objects.all().reverse()[0] # 最后一条
     
    # 2. 使用 order_by,在栏目名(column name)前加一个负号
    Author.objects.order_by('-id')[:20] # id最大的20条
    
    
    qs1 = Pathway.objects.filter(label__name='x')
    qs2 = Pathway.objects.filter(reaction__name='A + B >> C')
    qs3 = Pathway.objects.filter(inputer__name='WeizhongTu')
     
    # 合并到一起
    qs = qs1 | qs2 | qs3
    这个时候就有可能出现重复的
     
    # 去重方法
    qs = qs.distinct()
  • 相关阅读:
    Nero8刻录引导系统光盘镜像图文教程
    C#多线程与并行编程方面的电子书,中英文版本
    [转]C#通过委托更新UI(异步加载)
    [PHP] 6种负载均衡算法
    [GIt] 团队工作效率分析工具gitstats
    [Git] git代码统计
    [Git] 写文章 史上最全文献检索、阅读及管理攻略
    [Git] 谷歌的代码管理
    [JQuery] jQuery选择器ID、CLASS、标签获取对象值、属性、设置css样式
    [Mongo] 解决mongoose不支持条件操作符 $gt$gte:$lte$ne $in $all $not
  • 原文地址:https://www.cnblogs.com/LiuFengH/p/9928821.html
Copyright © 2011-2022 走看看