语法:extra(select=None, where=None, params=None, tables=None, order_by=None, select_params=None)
比如我们要执行:
select
1,Entry.objects.extra(select={'is_recent': "pub_date > '2006-01-01'"})
等价于sql语句
SELECT blog_entry.*, (pub_date > '2006-01-01') AS is_recent FROM blog_entry;
2,Blog.objects.extra(
select={
'entry_count': 'SELECT COUNT(*) FROM blog_entry WHERE blog_entry.blog_id = blog_blog.id'
},
)等价于
SELECT blog_blog.*, (SELECT COUNT(*) FROM blog_entry WHERE blog_entry.blog_id = blog_blog.id) AS entry_count
FROM blog_blog;
3,Blog.objects.extra(
select=SortedDict([('a', '%s'), ('b', '%s')]),
select_params=('one', 'two'))
where
3,Entry.objects.extra(where=["foo='a' OR bar = 'a'", "baz = 'a'"])
等价于
SELECT * FROM blog_entry WHERE (foo='a' OR bar='a') AND (baz='a')
4,Blog.objects.filter(pk__in=[3,4,5,20])
等价于
Blog.objects.extra(where=['id IN (3, 4, 5, 20)'])
order
q = Entry.objects.extra(select={'is_recent': "pub_date > '2006-01-01'"})
q = q.extra(order_by = ['-is_recent'])
params
good
Entry.objects.extra(where=['headline=%s'], params=['Lennon'])
bad
Entry.objects.extra(where=["headline='Lennon'"]) 似乎不让这样用
Game.objects.extra(where=['view_count>%s or id>%s'], params=[self.view_count, self.id]).values('id').count()
Game.objects.extra(select={'vcount':"select count(*) from game_history gh where gh.addtime>='%s' and gh.game_id=game.id" % start_time},).order_by('-vcount', '-view_count', '-id')
Medal.objects.extra(where=['id>0 group by user_id desc'])
比如我们要执行:
select
1,Entry.objects.extra(select={'is_recent': "pub_date > '2006-01-01'"})
等价于sql语句
SELECT blog_entry.*, (pub_date > '2006-01-01') AS is_recent FROM blog_entry;
2,Blog.objects.extra(
select={
'entry_count': 'SELECT COUNT(*) FROM blog_entry WHERE blog_entry.blog_id = blog_blog.id'
},
)等价于
SELECT blog_blog.*, (SELECT COUNT(*) FROM blog_entry WHERE blog_entry.blog_id = blog_blog.id) AS entry_count
FROM blog_blog;
3,Blog.objects.extra(
select=SortedDict([('a', '%s'), ('b', '%s')]),
select_params=('one', 'two'))
where
3,Entry.objects.extra(where=["foo='a' OR bar = 'a'", "baz = 'a'"])
等价于
SELECT * FROM blog_entry WHERE (foo='a' OR bar='a') AND (baz='a')
4,Blog.objects.filter(pk__in=[3,4,5,20])
等价于
Blog.objects.extra(where=['id IN (3, 4, 5, 20)'])
order
q = Entry.objects.extra(select={'is_recent': "pub_date > '2006-01-01'"})
q = q.extra(order_by = ['-is_recent'])
params
good
Entry.objects.extra(where=['headline=%s'], params=['Lennon'])
bad
Entry.objects.extra(where=["headline='Lennon'"]) 似乎不让这样用
Game.objects.extra(where=['view_count>%s or id>%s'], params=[self.view_count, self.id]).values('id').count()
Game.objects.extra(select={'vcount':"select count(*) from game_history gh where gh.addtime>='%s' and gh.game_id=game.id" % start_time},).order_by('-vcount', '-view_count', '-id')
Medal.objects.extra(where=['id>0 group by user_id desc'])