码迷,mamicode.com
首页 > 移动开发 > 详细

用了Dapper之后通篇还是SqlConnection,真的看不下去了

时间:2020-08-10 13:10:34      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:comm   委托   入口   int   com   sqlt   否则   重载   朋友   

原始SQl语句: select ip, group_concat(id) as id from whitelist group by ip; 

 

方法一:

Django-ORM实现:

1、创建Concat类:

技术图片
from django.db.models import Aggregate, CharField

class Concat(Aggregate):
    """ORM用来分组显示其他字段 相当于group_concat"""
    function = ‘GROUP_CONCAT‘
    template = ‘%(function)s(%(distinct)s%(expressions)s)‘

    def __init__(self, expression, distinct=False, **extra):
        super(Concat, self).__init__(
            expression,
            distinct=‘DISTINCT ‘ if distinct else ‘‘,
            output_field=CharField(),
            **extra)
技术图片

 

2、 使用模型类管理器查询

WhiteList.objects.values(‘ip‘).annotate(id=Concat(‘id‘))

 

# 待验证

 

方法二:

当模型查询API不够用时,您可以回退到编写原始SQL。Django为您提供了两种执行原始SQL查询的方法:您可以使用Manager.raw()执行原始查询并返回模型实例,也可以完全避免模型层并直接执行自定义SQL。

Django gives you two ways of performing raw SQL queries: you can use Manager.raw() to perform raw queries and return model instances, or you can avoid the model layer entirely and execute custom SQL directly.

使用Manage.raw(sql语句)

技术图片
class Person(models.Model):
    first_name = models.CharField(...)
    last_name = models.CharField(...)
    birth_date = models.DateField(...)


>>> Person.objects.raw(‘‘‘SELECT first AS first_name,
...                              last AS last_name,
...                              bd AS birth_date,
...                              pk AS id,
...                       FROM some_other_table‘‘‘)
技术图片

 

方法三:

在即将推出的Django 1.8中你可以实现GroupConcat表达式,然后查询看起来像:

Event.objects.values(‘slug‘).annotate(emails=GroupConcat(‘task__person__email‘))

.values( ).annotate( )组合将GROUP BY设置为slug,当然GroupConcat实现进行实际聚合。

用了Dapper之后通篇还是SqlConnection,真的看不下去了

标签:comm   委托   入口   int   com   sqlt   否则   重载   朋友   

原文地址:https://www.cnblogs.com/frank0812/p/13469187.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!