归志宁无五亩园,读书本意在元元。这篇文章主要讲述用了Dapper之后通篇还是SqlConnection,真的看不下去了相关的知识,希望能为你提供帮助。
原始SQl语句:
select
ip, group_concat(id)
as
id
from
whitelist
group
by
ip;
方法一:
Django-ORM实现:
1、创建Concat类:
文章图片
from django.db.models import Aggregate, CharFieldclass 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‘))
【用了Dapper之后通篇还是SqlConnection,真的看不下去了】.values( ).annotate( )组合将GROUP BY设置为slug,当然GroupConcat实现进行实际聚合。
推荐阅读
- Android 原生 SQLite 数据库的一次封装实践
- Azure Application Gateway对后端 Web App 进行负载均衡
- C. Uncle Bogdan and Country Happiness solution
- SpringBoot02--将application.yaml配置文件中的属性和组件中的属性进行绑定
- uni-app 功能实现
- android 字符串拼接获取图片
- ant-design-vue 之form表单中label-col和wrapper-col使用
- 安卓四大组件之服务服务的生命周期和启动方式
- Android Studio 常用快捷键(超实用!!!)