집계 함수
현재 6개의 집계 기능이 지원됩니다.
카운트
count(distinct: bool = True) -> int
지정된 기준과 일치하는 행 수를 반환합니다(즉, 필터 및 제외 적용). 구별이 참(기본값)인 경우 선택한 기본 행 수를 반환합니다.
거짓인 경우 카운트는 반환된 총 행 수입니다(일대다 또는 다대다 왼쪽 선택 _lated 테이블 조인에 대한 추가 행 포함). 거짓은 의존하는 워크플로우에 대한 레거시(결함) 동작입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | 클래스 북(ormar. 모델):
ormar_config = ormar. OrmarConfig (
데이터베이스 = 데이터베이스. 데이터베이스(DATABASE_URL),
메타데이터 = sqlalchemy. 메타데이터(),
표 이름 = "책"
)
ID: int = ormar. 정수(prial_key = 참)
제목: str = ormar. 문자열(max_long = 200)
작성자: str = ormar. 문자열(max_long = 100)
장르: str = ormar. 문자열(
최대 길이 = 100,
기본값 = "픽션",
선택 = ["픽션", "어드벤처", "히스토릭", "판타지"],
)
# 책 모델에 대한 db의 행 수를 반환합니다.
no_of_ = 북.ts.카운트()를 기다립니다.
|
존재
존재 () -> 부울
지정된 기준을 충족하는 행이 있는지 확인하기 위해 부울 값을 반환합니다(필터 및 제외와 함께 적용됨).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | 클래스 북(ormar. 모델):
ormar_config = ormar. OrmarConfig (
데이터베이스 = 데이터베이스. 데이터베이스(DATABASE_URL),
메타데이터 = sqlalchemy. 메타데이터(),
표 이름 = "책"
)
ID: int = ormar. 정수(prial_key = 참)
제목: str = ormar. 문자열(max_long = 200)
작성자: str = ormar. 문자열(max_long = 100)
장르: str = ormar. 문자열(
최대 길이 = 100,
기본값 = "픽션",
선택 = ["픽션", "어드벤처", "히스토릭", "판타지"],
)
# 지정된 행이 있는 경우 부울 값을 반환합니다.
has_샘플 = 대기 북.ts.filter (제목 = '샘플'). 존재합니다 ()
|
그리고
합계(열) -> 임의
지정된 기준과 일치하는 행의 열 합계를 반환합니다(필터를 적용하고 이전에 설정한 경우 제외).
관련 열을 포함하여 하나 이상의 열 이름을 전달할 수 있습니다.
현재 전달된 각 열은 별도로 집계됩니다(따라서 합계(col1 + col2)는 불가능하므로 합계(col1, col2)를 사용한 다음 파이썬으로 반환된 2의 합계를 추가할 수 있습니다).
숫자가 아닌 열을 합산할 수 없습니다.
하나의 열을 집계하는 경우 단일 값을 결과로 직접 반환하고 여러 열을 집계하는 경우 열이 포함된 사전을 반환합니다. 결과 쌍
주어진 모델은 다음과 같습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 | from typing import Optional
import databases
import ormar
import sqlalchemy
from tests.settings import DATABASE_URL
database = databases.Database(DATABASE_URL)
metadata = sqlalchemy.MetaData()
base_ormar_config = ormar.OrmarConfig(
metadata=metadata,
database=database,
)
class Author(ormar.Model):
ormar_config = base_ormar_config.copy(tablename="authors", order_by=["-name"])
id: int = ormar.Integer(primary_key=True)
name: str = ormar.String(max_length=100)
class Book(ormar.Model):
ormar_config = base_ormar_config.copy(
tablename="books", order_by=["year", "-ranking"]
)
id: int = ormar.Integer(primary_key=True)
author: Optional[Author] = ormar.ForeignKey(Author)
title: str = ormar.String(max_length=100)
year: int = ormar.Integer(nullable=True)
ranking: int = ormar.Integer(nullable=True)
|
사용 예제는 다음과 같을 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 | 작성자 = 작성자를 기다립니다(이름 = "작성자 1").저장()
기다리는 책(제목 = "책 1", 연도 = 1920, 순위 = 3, 저자 = 저자).저장()
기다리는 책(제목 = "책 2", 연도 = 1930, 순위 = 1, 저자 = 저자).저장()
기다리는 책(제목 = "3권", 연도 = 1923, 순위 = 5, 저자 = 저자).저장()
주장은 북.ts.합계("년") ==5773을 기다립니다.
결과 = 북.ts.합계를 기다립니다(["년", "순위"]).
주장 결과 == 평결 (연도 = 5773, 순위 = 9)
시도:
# 문자열 열을 합산 할 수 없음
기다리고 있는 책. ts.합계 ("제목")
오마르를 제외하고QueryDefinitionError:
통과
주장 대기 권한 부여.ts._("책"). 합계("책__년") ==5773
결과 = 기다립니다. 인증.ts._("책"). 합계(
["책__년", "책__순위"]
)
주장 결과 == 디트 (책__년 = 5773, 책__순위 = 9)
주장 (
기다리다 권한.ts._ ("책")
. 필터 ( __year__lt = 1925)
. 합계 (" __ 년")
== 3843
)
|
평균
평균(열) -> 임의
지정된 기준과 일치하는 행에 대한 열의 평균을 반환합니다(필터를 적용하고 이전에 설정한 경우 제외).
관련 열을 포함하여 하나 이상의 열 이름을 전달할 수 있습니다.
현재 전달된 각 열은 별도로 집계됩니다(따라서 합계(col1 + col2)는 불가능하므로 합계(col1, col2)를 사용한 다음 파이썬으로 반환된 2의 합계를 추가할 수 있습니다).
숫자가 아닌 열의 평균을 지정할 수 없습니다.
하나의 열을 집계하는 경우 단일 값을 결과로 직접 반환하고 여러 열을 집계하는 경우 열이 포함된 사전을 반환합니다. 결과 쌍
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 | from typing import Optional
import databases
import ormar
import sqlalchemy
from tests.settings import DATABASE_URL
database = databases.Database(DATABASE_URL)
metadata = sqlalchemy.MetaData()
base_ormar_config = ormar.OrmarConfig(
metadata=metadata,
database=database,
)
class Author(ormar.Model):
ormar_config = base_ormar_config.copy(tablename="authors", order_by=["-name"])
id: int = ormar.Integer(primary_key=True)
name: str = ormar.String(max_length=100)
class Book(ormar.Model):
ormar_config = base_ormar_config.copy(
tablename="books", order_by=["year", "-ranking"]
)
id: int = ormar.Integer(primary_key=True)
author: Optional[Author] = ormar.ForeignKey(Author)
title: str = ormar.String(max_length=100)
year: int = ormar.Integer(nullable=True)
ranking: int = ormar.Integer(nullable=True)
|
사용 예제는 다음과 같을 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 | 작성자 = 작성자를 기다립니다(이름 = "작성자 1").저장()
기다리는 책(제목 = "책 1", 연도 = 1920, 순위 = 3, 저자 = 저자).저장()
기다리는 책(제목 = "책 2", 연도 = 1930, 순위 = 1, 저자 = 저자).저장()
기다리는 책(제목 = "3권", 연도 = 1923, 순위 = 5, 저자 = 저자).저장()
주장 라운드 (플로트 (await Book .ts.avg ("년"), 2) == 1924.33
결과 = 북.ts.avg를 기다립니다(["년", "순위"]).
주장 라운드 (플로트 (결과.get ("년"), 2) == 1924.33
주장 결과.get ("순위") == 3.0
시도:
# avg 문자열 열 수 없음
북.ts.avg("제목")를 기다립니다.
오마르를 제외하고QueryDefinitionError:
통과
결과 = 기다립니다 권한.ts._("책").avg("책__년")
주장된 라운드(플로트(결과), 2) == 1924.33
결과 = 기다립니다 권한.ts._("책").avg(
["책__년", "책__순위"]
)
주장 라운드 (float (t.get ("books__년"), 2) == 1924.33
주장 결과.get ("__") == 3.0
주장 (
기다리다 권한.ts._ ("책")
. 필터 ( __year__lt = 1925)
. Avg (" __ 년")
== 1921.5
)
|
분
분(열) ->
지정된 기준과 일치하는 행에 대한 열의 최소값을 반환합니다(필터와 함께 적용됨, 이전에 설정된 경우 제외됨).
관련 열을 포함하여 하나 이상의 열 이름을 전달할 수 있습니다.
현재 전달된 각 열은 별도로 집계됩니다(따라서 합계(col1 + col2)는 불가능하므로 합계(col1, col2)를 사용한 다음 파이썬으로 반환된 2의 합계를 추가할 수 있습니다).
하나의 열을 집계하는 경우 단일 값을 결과로 직접 반환하고 여러 열을 집계하는 경우 열이 포함된 사전을 반환합니다. 결과 쌍
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 | from typing import Optional
import databases
import ormar
import sqlalchemy
from tests.settings import DATABASE_URL
database = databases.Database(DATABASE_URL)
metadata = sqlalchemy.MetaData()
base_ormar_config = ormar.OrmarConfig(
metadata=metadata,
database=database,
)
class Author(ormar.Model):
ormar_config = base_ormar_config.copy(tablename="authors", order_by=["-name"])
id: int = ormar.Integer(primary_key=True)
name: str = ormar.String(max_length=100)
class Book(ormar.Model):
ormar_config = base_ormar_config.copy(
tablename="books", order_by=["year", "-ranking"]
)
id: int = ormar.Integer(primary_key=True)
author: Optional[Author] = ormar.ForeignKey(Author)
title: str = ormar.String(max_length=100)
year: int = ormar.Integer(nullable=True)
ranking: int = ormar.Integer(nullable=True)
|
사용 예제는 다음과 같을 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 | 작성자 = 작성자를 기다립니다(이름 = "작성자 1").저장()
기다리는 책(제목 = "책 1", 연도 = 1920, 순위 = 3, 저자 = 저자).저장()
기다리는 책(제목 = "책 2", 연도 = 1930, 순위 = 1, 저자 = 저자).저장()
기다리는 책(제목 = "3권", 연도 = 1923, 순위 = 5, 저자 = 저자).저장()
주장은 북.ts.min("년") == 1920을 기다립니다.
결과 = 북.ts.min을 기다립니다(["년", "순위"]).
주장 결과 == 평결 (연도 = 1920년, 순위 = 1)
북.ts.min("제목") == "1권"을 기다리라고 주장하십시오.
주장 대기 권한.ts._("책").min("책__년") == 1920
결과 = 기다림 권한.ts._("책") .min(
["책__년", "책__순위"]
)
주장 결과 == 디트 (책__년 = 1920, 책__순위 = 1)
주장 (
기다리다 권한.ts._ ("책")
. 필터 ( __year__gt = 1925)
. 민 (" __ 년")
== 1930
)
|
최대
최대(열) -> 임의
지정된 기준과 일치하는 행에 대한 열의 최대값을 반환합니다(필터와 함께 적용됨, 이전에 설정된 경우 제외됨).
지정된 기준과 일치하는 행에 대한 열의 최소값을 반환합니다(필터와 함께 적용됨, 이전에 설정된 경우 제외됨).
관련 열을 포함하여 하나 이상의 열 이름을 전달할 수 있습니다.
현재 전달된 각 열은 별도로 집계됩니다(따라서 합계(col1 + col2)는 불가능하므로 합계(col1, col2)를 사용한 다음 파이썬으로 반환된 2의 합계를 추가할 수 있습니다).
하나의 열을 집계하는 경우 단일 값을 결과로 직접 반환하고 여러 열을 집계하는 경우 열이 포함된 사전을 반환합니다. 결과 쌍
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 | from typing import Optional
import databases
import ormar
import sqlalchemy
from tests.settings import DATABASE_URL
database = databases.Database(DATABASE_URL)
metadata = sqlalchemy.MetaData()
base_ormar_config = ormar.OrmarConfig(
metadata=metadata,
database=database,
)
class Author(ormar.Model):
ormar_config = base_ormar_config.copy(tablename="authors", order_by=["-name"])
id: int = ormar.Integer(primary_key=True)
name: str = ormar.String(max_length=100)
class Book(ormar.Model):
ormar_config = base_ormar_config.copy(
tablename="books", order_by=["year", "-ranking"]
)
id: int = ormar.Integer(primary_key=True)
author: Optional[Author] = ormar.ForeignKey(Author)
title: str = ormar.String(max_length=100)
year: int = ormar.Integer(nullable=True)
ranking: int = ormar.Integer(nullable=True)
|
사용 예제는 다음과 같을 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 | 작성자 = 작성자를 기다립니다(이름 = "작성자 1").저장()
기다리는 책(제목 = "책 1", 연도 = 1920, 순위 = 3, 저자 = 저자).저장()
기다리는 책(제목 = "책 2", 연도 = 1930, 순위 = 1, 저자 = 저자).저장()
기다리는 책(제목 = "3권", 연도 = 1923, 순위 = 5, 저자 = 저자).저장()
주장은 북.ts.max("년") == 1930을 기다립니다.
결과 = 북.ts.max를 기다립니다(["년", "순위"]).
주장된 결과 == 디트 (연도 = 1930년, 순위 = 5)
주장은 북.ts.max("제목") == "3권"을 기다립니다.
주장 대기 권한.ts._("책").max("책__년") == 1930
결과 = 기다립니다 권한.ts._("책").max(
["책__년", "책__순위"]
)
주장 결과 == 디트 (책 __ 년 = 1930, 책 __ 순위 = 5)
주장 (
기다리다 권한.ts._ ("책")
. 필터 ( __year__lt = 1925)
. 맥스 (" __ 년")
== 1923
)
|
QuerysetProxy 방법
관련 ManyTo많이 필드 및 ReverseForeignKey에 직접 액세스하면 관련 모델 목록이 반환됩니다.
그러나 쿼리 세트 API의 하위 집합도 표시되므로 상위 모델에서 직접 필터링, 생성, 관련 모델 선택 등을 할 수 있습니다.
카운트
위의 카운트 함수와 동일하지만 관계의 다른 쪽 끝에 있는 관련 개체에서 열을 선택할 수 있습니다.
!!!QuerysetProxy에 대해 자세히 알아보려면 QuerysetProxy 섹션을 방문하십시오.
존재
위의 존재 함수와 동일하지만 관계의 다른 쪽 끝에 있는 관련 개체에서 열을 선택할 수 있습니다.
그리고
위의 합계 함수와 동일하지만 관계의 다른 끝에서 관련 개체의 열을 합산할 수 있습니다.
평균
위의 avg 함수와 동일하지만 관계의 다른 끝에서 관련 개체의 열을 평균할 수 있습니다.
분
위의 min 함수와 동일하지만 관계의 다른 쪽 끝에 있는 관련 개체에서 최소 수의 열을 선택할 수 있습니다.
최대
최대 함수는 위와 정확히 동일하지만 관계의 다른 쪽 끝에 있는 관련 개체에서 가장 큰 열을 선택할 수 있습니다.
!!!QuerysetProxy에 대해 자세히 알아보려면 QuerysetProxy 섹션을 방문하십시오.