django中extra的用法

语法: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'])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值