=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
参考链接:
- http://stackoverflow.com/questions/687295/how-do-i-do-a-not-equal-in-django-queryset-filtering/1155013#1155013
- https://my.oschina.net/u/993130/blog/209460
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('-', ''))
参考链接:
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才会开始查询。
参考链接:
- https://docs.djangoproject.com/en/1.8/ref/models/querysets/#django.db.models.query.QuerySet.filter
- http://stackoverflow.com/questions/310732/in-django-how-does-one-filter-a-queryset-with-dynamic-field-lookups #经典
4.Django的ORM中filter(条件1).filter(条件2)与filter(条件1,条件2)的区别
filter(条件1).filter(条件2) 与 filter(条件1,条件2) 都表示的是「同时满足条件1和条件2」,但是后者会比前者的效率稍高一点点(差别也不大,看个人喜好)。
参考链接:
- http://plq168.blog.163.com/blog/static/531014622010428111225872/
- http://stackoverflow.com/questions/8164675/chaining-multiple-filter-in-django-is-this-a-bug
- https://docs.djangoproject.com/en/1.8/topics/db/queries/#spanning-multi-valued-relationships
5.在Django的ORM中如何使用多列作为主键(复合主键)?
class MyTable(models.Model): ... class Meta: unique_together = (('key1', 'key2'),)
参考链接:
- https://code.djangoproject.com/wiki/MultipleColumnPrimaryKeys
- http://stackoverflow.com/questions/16800375/how-can-set-two-field-primary-key-for-my-models-in-django
- http://stackoverflow.com/questions/28712848/composite-primary-key-in-django
6.在Django的ORM中使用 Q 对象构建复杂的查询语句
7.其它
主键导致的相关问题
- http://stackoverflow.com/questions/28917252/error-in-a-class-when-trying-to-syncdb-python-django
- https://docs.djangoproject.com/en/1.10/ref/checks/#models
http://blog.csdn.net/zdxkzgy/article/details/49951107
Django ORM总结
数据库设计三大范式
=END=