首页 > 数据库 >django 1.8 官方文档翻译: 2-5-10 数据库函数

django 1.8 官方文档翻译: 2-5-10 数据库函数

时间:2023-04-13 14:34:40浏览次数:54  
标签:10 name Author models author 1.8 django length objects


数据库函数

New in Django 1.8.

下面记述的类为用户提供了一些方法,来在Django中使用底层数据库提供的函数用于注解、聚合或者过滤器等操作。函数也是表达式,所以可以像聚合函数一样混合使用它们。

我们会在每个函数的实例中使用下面的模型:

class Author(models.Model):
    name = models.CharField(max_length=50)
    age = models.PositiveIntegerField(null=True, blank=True)
    alias = models.CharField(max_length=50, null=True, blank=True)
    goes_by = models.CharField(max_length=50, null=True, blank=True)

我们并不推荐在CharField上允许null=True,以后那位这会允许字段有两个“空值”,但是对于下面的Coalesce示例来说它很重要。

Coalesce

class Coalesce(*expressions, **extra)[source]

接受一个含有至少两个字段名称或表达式的列表,返回第一个非空的值(注意空字符串不被认为是一个空值)。每个参与都必须是相似的类型,所以掺杂了文本和数字的列表会导致数据库错误。

使用范例:

>>> # Get a screen name from least to most public
>>> from django.db.models import Sum, Value as V
>>> from django.db.models.functions import Coalesce
>>> Author.objects.create(name='Margaret Smith', goes_by='Maggie')
>>> author = Author.objects.annotate(
...    screen_name=Coalesce('alias', 'goes_by', 'name')).get()
>>> print(author.screen_name)
Maggie

>>> # Prevent an aggregate Sum() from returning None
>>> aggregated = Author.objects.aggregate(
...    combined_age=Coalesce(Sum('age'), V(0)),
...    combined_age_default=Sum('age'))
>>> print(aggregated['combined_age'])
0
>>> print(aggregated['combined_age_default'])
None

Concat

class Concat(*expressions, **extra)[source]

接受一个含有至少两个文本字段的或表达式的列表,返回连接后的文本。每个参数都必须是文本或者字符类型。如果你想把一个TextField()和一个CharField()连接, 一定要告诉Djangooutput_field应该为TextField()类型。在下面连接Value的例子中,这也是必需的。

这个函数不会返回null。在后端中,如果一个null参数导致了整个表达式都是null,Django会确保把每个null的部分转换成一个空字符串。

使用范例:

>>> # Get the display name as "name (goes_by)"
>>> from django.db.models import CharField, Value as V
>>> from django.db.models.functions import Concat
>>> Author.objects.create(name='Margaret Smith', goes_by='Maggie')
>>> author = Author.objects.annotate(
...    screen_name=Concat('name', V(' ('), 'goes_by', V(')'),
...    output_field=CharField())).get()
>>> print(author.screen_name)
Margaret Smith (Maggie)

Length

class Length(expression, **extra)[source]

接受一个文本字段或表达式,返回值的字符个数。如果表达式是null,长度也会是null

使用范例:

>>> # Get the length of the name and goes_by fields
>>> from django.db.models.functions import Length
>>> Author.objects.create(name='Margaret Smith')
>>> author = Author.objects.annotate(
...    name_length=Length('name'),
...    goes_by_length=Length('goes_by')).get()
>>> print(author.name_length, author.goes_by_length)
(14, None)

Lower

class Lower(expression, **extra)[source]

接受一个文本字符串或表达式,返回它的小写表示形式。

使用范例:

>>> from django.db.models.functions import Lower
>>> Author.objects.create(name='Margaret Smith')
>>> author = Author.objects.annotate(name_lower=Lower('name')).get()
>>> print(author.name_lower)
margaret smith

Substr

class Substr(expression, pos, length=None, **extra)[source]

返回这个字段或者表达式的,以pos位置开始,长度为length的子字符串。位置从下标为1开始,所以必须大于0。如果lengthNone,会返回剩余的字符串。

使用范例:

>>> # Set the alias to the first 5 characters of the name as lowercase
>>> from django.db.models.functions import Substr, Lower
>>> Author.objects.create(name='Margaret Smith')
>>> Author.objects.update(alias=Lower(Substr('name', 1, 5)))
1
>>> print(Author.objects.get(name='Margaret Smith').alias)
marga

Upper

class Upper(expression, **extra)[source]

接受一个文本字符串或表达式,返回它的大写表示形式。

使用范例:

>>> from django.db.models.functions import Upper
>>> Author.objects.create(name='Margaret Smith')
>>> author = Author.objects.annotate(name_upper=Upper('name')).get()
>>> print(author.name_upper)
MARGARET SMITH

译者:Django 文档协作翻译小组,原文:Database Functions

本文以 CC BY-NC-SA 3.0 协议发布,转载请保留作者署名和文章出处。

Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。交流群:467338606。

标签:10,name,Author,models,author,1.8,django,length,objects
From: https://blog.51cto.com/wizardforcel/6187991

相关文章

  • django 1.8 官方文档翻译: 3-3-4 管理文件
    管理文件这篇文档描述了Django为那些用户上传文件准备的文件访问API。底层的API足够通用,你可以使用为其它目的来使用它们。如果你想要处理静态文件(JS,CSS,以及其他),参见管理静态文件(CSS和图像)。通常,Django使用MEDIA_ROOT和MEDIA_URL设置在本地储存文件。下面的例子假设你使用这些默认......
  • 使用云净装win10系统
    一、准备工作:1制作pe启动U盘。2下载windowsiso镜像。3设置装系统电脑U盘启动。二、安装系统:1插入U盘,重启电脑。2进入PE系统。3安装系统,等待重启。 1制作pe启动U盘。需要一个8GB以上的U盘,正常运行的系统并下载云净装机。云净装机,使用百度搜索下就有了,......
  • Pandas 学习手册中文第二版:6~10
    原文:Learningpandas协议:CCBY-NC-SA4.0译者:飞龙六、索引数据索引是用于优化查询序列或数据帧中的值的工具。它们很像关系数据库中的键,但是功能更强大。它们为多组数据提供了对齐方式,还带有如何处理数据的各种任务(如重采样到不同频率)的语义。您将对Pandas执行的许多建......
  • S210电脑 Hackintosh 黑苹果efi引导文件
    原文来源于黑果魏叔官网,转载需注明出处。(下载请直接百度黑果魏叔)硬件型号驱动情况主板S210处理器i9-10980HK已驱动内存64G(2*32GDDR43200)已驱动硬盘Intel760p512GB已驱动显卡IntelUHD630已驱动声卡瑞昱@英特尔HighDefinitionAudio控制器已驱动网卡英特尔EthernetCon......
  • NumPy 基础知识 :6~10
    原文:NumpyEssentials协议:CCBY-NC-SA4.0译者:飞龙六、NumPy中的傅立叶分析除其他事项外,傅立叶分析通常用于数字信号处理。这要归功于它在将输入信号(时域)分离为以离散频率(频域)起作用的分量方面如此强大。开发了另一种快速算法来计算离散傅里叶变换(DFT),这就是众所周知的快......
  • win10安装Redis5、配置自启动教程
    前提条件:首先我安装的是压缩包版的Redis5.0.14.1,下载链接为https://github.com/tporadowski/redis/releases安装教程下载软件并解压进入软件目录,修改redis.windows.conf,如下图所示:启动redis,进入windows命令行,cd到安装路径,然后如下图:本地命令行连接redis,使用redis-cli.......
  • PAT Basic 1091. N-自守数
    PATBasic1091.N-自守数1.题目描述:如果某个数\(K\)的平方乘以\(N\)以后,结果的末尾几位数等于\(K\),那么就称这个数为“\(N\)-自守数”。例如\(3×92^2=25392\),而\(25392\)的末尾两位正好是\(92\),所以\(92\)是一个\(3\)-自守数。本题就请你编写程序判断一个给定的......
  • 升级win10后无法使用IE浏览器??
     控制面板搜索选项    ......
  • PAT Basic 1090. 危险品装箱
    PATBasic1090.危险品装箱1.题目描述:集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里。比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸。本题给定一张不相容物品的清单,需要你检查每一张集装箱货品清单,判断它们是否能装在同一只箱子里。2.输入格......
  • Rocky Linux 9 安装 MariaDB 10.5
    1、安装MariaDBdnf-yinstallmariadb-server2、修改配置#vim/etc/my.cnf[client]port=3306socket=/var/lib/mysql/mysql.sockdefault-character-set=utf8mb4[mysqld]port=3306socket=/var/lib/mysql/mysql.sockdatadir=/var/lib/mysqlpid-file......