Django查询语句

Django学习第三天

Model

假设有一个model类,代码如下:

class ArticleEnglish(models.Model):
    title = models.CharField(max_length=255, blank=True, null=True)
    keywords = models.TextField(null=True)
    description = models.TextField(null=True)
    content = models.OneToOneField('ArticleContentEnglish', related_name = 'article', on_delete = models.CASCADE)
    status = models.IntegerField(null=True)

    class Meta:
        managed = True
        db_table = 'article_english'

class ArticleContentEnglish(models.Model):
    content = models.TextField(null=True)

    class Meta:
        managed = True
        db_table = 'article_content_english'

在model类中构建了两个模型在执行数据迁移和写入后,需在数据库中创建两张表一张为英文文章表,另一张为文章内容表。在这个model类中我并没有声明一个主键,那是因为我继承了model.Model,这使得Django在进行数据迁移时会识别我建立的模型中有无primary_key属性字段,若无则会自动添加一个自动增长的ID主键字段。
表结构如下:
article_english表:
article_english表
article_content_english表:
article_content_english表

查询

进行查询时需导入需要查询的model类
进行查询时,强烈建议在外层套上一层try except,以保证在测试时不会应该数据库连接等意外情况而导致网站停止

# 查询所有
ArticleEnglish.objects.all()
# select * from article_english;
# 查询所有并按照id排序(默认升序) 若要倒序则为 order_by('-id')
ArticleEnglish.objects.all().order_by('id')
# select * from article_english order by id asc;
# 查询id为1的文章
ArticleEnglish.objects.get(id=1)
# select * from article_english where id = 1;
# get方法只能检索一条,如果目标不存在或存在多个对象时,则会报错。
# 查询id>5的文章,如要大于等于则将gt改为gte
ArticleEnglish.objects.filter(id__gt=5)
# select * from article_english where id > 5;
# filter方法能检索多条,一条或0条数据,返回的是queryset,get返回的是对象
# 查询id<5的文章,如要小于等于则将lt改为lte
ArticleEnglish.objects.filter(id__lt=5)
# select * from article_english where id < 5;
# 查询id等于1或等于3的文章
ArticleEnglish.objects.filter(id__in=[1,3])
# select * from article_english where id in (1,3);
# 查询id在13之间的文章
ArticleEnglish.objects.filter(id__range(1,3))
# select * from article_english where id between 1 and 3;
# 查询名字中包含python的文章
ArticleEnglish.objects.filter(title__contains='python')
# select * from article_english where title like '%python%';
# contains对大小写敏感,如要对大小写不敏感请使用icontains
# 查找标题以python或java开头的文章
ArticleEnglish.objects.filter(title__regex=r'^(python|java)')
# select * from article_english where title regexp '^(python|java)';
# 查找关键词为空的文章
ArticleEnglish.objects.filter(keywords__isnull=True)
# select * from article_english where keywords is null;

笔者目前才刚刚开始django的学习,如有错误之处,请大牛见谅指出

posted @ 2018-12-06 15:12  一颗大白菜_20181203  阅读(281)  评论(0编辑  收藏  举报