Django的ORM使用记录_2


=Start=

缘由:

在使用的过程中记录一下Django的ORM知识/技巧,一来可以加深印象,同时也为方便以后参考。

正文:

1.Django中的比较操作

exact
iexact
contains
icontains
in
gt
gte
lt
lte
startswith
istartswith
endswith
iendswith
range
year
month
day
week_day
isnull
search
regex
iregex

参考链接:
2.在Django的ORM中如何用日期区间进行过滤?
# 有点问题
Sample.objects.filter(date__range=["2011-01-01", "2011-01-31"])

# 也有点问题
import datetime
samples = Sample.objects.filter(sampledate__gt=datetime.date(2011, 1, 1),
                                sampledate__lt=datetime.date(2011, 1, 31))

# 可以(start/end的格式为「2011-01-01」,date_int为整型字段)
Sample.objects.filter(date_int__gte=start.replace('-', ''), date_int__lte=end.replace('-', ''))
参考链接:

http://stackoverflow.com/questions/4668619/django-database-query-how-to-filter-objects-by-date-range/4668703#4668703

3.Django的ORM中如何进行多条件查询?
#可以在Python程序中用key/value格式的参数填充下面的「name」和「A/Z」
kwargs = {
    '{0}__{1}'.format('name', 'startswith'): 'A',
    '{0}__{1}'.format('name', 'endswith'): 'Z'
}

Person.objects.filter(**kwargs)

QuerySet是延迟的,创建QuerySet不会触及到数据库操作,你可以多个过滤合并到一起,直到求值的时候Django才会开始查询。

参考链接:
4.Django的ORM中filter(条件1).filter(条件2)与filter(条件1,条件2)的区别

filter(条件1).filter(条件2) 与 filter(条件1,条件2) 都表示的是「同时满足条件1和条件2」,但是后者会比前者的效率稍高一点点(差别也不大,看个人喜好)。

参考链接:
5.在Django的ORM中如何使用多列作为主键(复合主键)?
class MyTable(models.Model):
    ...
    class Meta:
        unique_together = (('key1', 'key2'),)
参考链接:
6.在Django的ORM中使用 Q 对象构建复杂的查询语句
7.其它
主键导致的相关问题
Django ORM总结
数据库设计三大范式

=END=

, ,

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注