콘텐츠로 이동

데이터베이스에서 데이터 읽기

다음 방법을 사용하면 데이터베이스에서 데이터를 로드할 수 있습니다.

  • 겟(*Args,**kwargs) -> 모델

  • get_or_create(_defaults: Optional[Dict[str, Any]] = None, *args, **kwargs) -> Tuple[Model, bool]

  • first(*args, **kwargs) -> Model

  • all(*args, **kwargs) -> List[Optional[Model]]

  • iterate(*args, **kwargs) -> AsyncGenerator[Model]

  • 모델

    • 모델.로드() 방법
    • 쿼리 세트 에이전트

    • QuerysetProxy.get(*args, **kwargs) 방법

    • QuerysetProxy.get_or_create(_defaults: Optional[Dict[str, Any]] = None, *args, **kwargs) 방법
    • QuerysetProxy.first(*args, **kwargs) 방법
    • QuerysetProxy.all(*args, **kwargs) 방법

겟

가져오기(*args,**kwargs) -> 모델

kwargs 설정 조건을 만족하는 데이터베이스에서 첫 번째 행을 가져옵니다.

조건이 설정되지 않은 경우 열 pk별로 정렬된 데이터베이스의 마지막 행을 반환합니다.

조건을 통과하면 실제로 아래에 설명된 필터(*args,**kwargs) 메서드를 호출합니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
클래스 트랙(ormar. 모델):
    ormar_config = ormar. OrmarConfig (
        데이터베이스 = 데이터베이스,
        메타데이터 = 메타데이터,
        테이블 이름 = "트랙"
    )

    ID: int = ormar. 정수(prial_key = 참)
    앨범: 옵션 [앨범] = ormar. ForeignKey (앨범)
    이름: str = ormar. 문자열(max_long = 100)
    위치: int = ormar. 정수()


추적 = 대기 추적.ts.get (이름 = '새')
# 위의 내용은 Track.ts.filter(이름 = 'The Bird')를 기다리는 것과 같습니다.
트랙 2 = 트랙 = 트랙을 기다립니다.
트랙 == 트랙 2
# 우리 예에서 db의 유일한 행이기 때문에 사실입니다.
# 그리고 논쟁 없이 첫 번째 행을 pk 열 데스크로 반환합니다.

!!!경고, 조건을 충족하는 행이 없으면 NoMatch 예외가 발생합니다.

1
기준을 충족하는 행이 여러 개 있는 경우 `MultipleMatches` 예외가 발생합니다.

얻거나 아무것도

get_or_none(*args, **kwargs) -> Model

이는 위에서 설명한 것과 정확히 동일하지만 기준과 일치하는 데이터베이스 레코드를 찾을 수 없으면 예외가 발생하는 대신 없음이 반환됩니다.

획득 또는 생성

get_or_create(_defaults: Optional[Dict[str, Any]] = None, *args, **kwargs) -> Tuple[Model, bool]

방법의 조합을 만들고 가져옵니다.

기준을 충족하는 행을 가져오려고 시도하고 NoMatch 예외가 발생하면 지정된 kwargs 및 _de로 새 행이 생성됩니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
클래스 앨범(ormar. 모델):
    ormar_config = base_ormar_config (tablename = "앨범")

    ID: int = ormar. 정수(prial_key = 참)
    이름: str = ormar. 문자열(max_long = 100)
    연도: int = ormar. 정수()


앨범, 생성됨 = Alum.ts.get_or_create(이름 = 'The Cat', _de ={"year": 1999})
생성된 주장은 참입니다
주장album.name== "고양이"
주장 앨범. 연도 == 1999
# 개체는 존재하지 않는 대로 생성됩니다.
Album 2, 생성됨 = Album을 기다립니다.ts.get_or_create (이름 = 'The Cat')
만들어진 주장은 거짓입니다
앨범 주장 == 앨범 2
# 같은 db 행이 반환되는 트루 반환

위의 예에서!!!경고 앨범과 앨범2는 데이터베이스의 동일한 행임에도 불구하고 두 개의 서로 다른 파이썬 개체입니다! 데이터베이스에서 새 데이터를 명시적으로 로드()할 때까지 두 번째 데이터를 새로 고치지 않습니다.

새 개체를 만들려면 pk 열 값을 전달하거나 pk 열을 자동 증분으로 설정해야 합니다.

먼저

first(*args, **kwargs) -> Model

데이터베이스에서 기본 키 열별로 오름차순으로 정렬된 첫 번째 행을 가져옵니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
클래스 앨범(ormar. 모델):
    ormar_config = base_ormar_config (tablename = "앨범")

    ID: int = ormar. 정수(prial_key = 참)
    이름: str = ormar. 문자열(max_long = 100)


Album을 기다리고 있습니다.
Album을 기다리고 있습니다.
앨범 = 앨범을 기다립니다. 첫 번째 ()
# prial_key 열 asc별 첫 번째 행
주장album.name== '고양이'

모두

all(*args, **kwargs) -> List[Optional["Model"]]

필터 설정 옵션의 경우 지정된 모델에 대한 데이터베이스의 모든 행을 반환합니다.

Kwargs를 전달하는 것은 필터(*args, **kwargs).all()을 호출하는 것과 같은 바로 가기입니다.

조건을 충족하는 행이 없으면 빈 목록이 반환됩니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
클래스 앨범(ormar. 모델):
    ormar_config = base_ormar_config (tablename = "앨범")

    ID: int = ormar. 정수(prial_key = 참)
    이름: str = ormar. 문자열(max_long = 100)


클래스 트랙(ormar. 모델):
    ormar_config = base_ormar_config (테이블 이름 = "트랙")

    ID: int = ormar. 정수(prial_key = 참)
    앨범: 옵션 [앨범] = ormar. ForeignKey (앨범)
    제목: str = ormar. 문자열(max_long = 100)
    위치: int = ormar. 정수()


트랙 = 대기 트랙.ts.t_("앨범").all(앨범__제목 = '샘플')
# 앨범 샘플의 모든 트랙 목록을 반환합니다.
# 가입에 대한 자세한 내용은 가입 및 하위 쿼리 섹션을 참조하십시오.

트랙 = 트랙.ts.all을 기다립니다 ()
# 데이터베이스의 모든 추적 목록을 반환합니다.

반복

iterate(*args, **kwargs) -> AsyncGenerator["Model"]

지정된 모델에 대한 데이터베이스의 모든 행에 대한 비동기 반복 가능 생성기를 반환합니다.

args 및/또는 kwargs를 통과하는 것은 filter(*args, **kwargs).iterate() 를 호출하는 것과 같은 바로 가기입니다.

조건을 충족하는 행이 없으면 빈 비동기 생성기가 반환됩니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
클래스 앨범(ormar. 모델):
    ormar_config = base_ormar_config (tablename = "앨범")

    ID: int = ormar. 정수(prial_key = 참)
    이름: str = ormar. 문자열(max_long = 100)


Album을 기다리고 있습니다.
Album을 기다리고 있습니다.
# 모든 앨범 모델을 비동기적으로 반복하여 생성기에서 한 번에 하나의 메인 모델을 생성합니다.
Alum.ts.iterate의 앨범에 대한 비동기화():
    인쇄(album.name)

# 고양이
# 개

!!!는 반복()을 사용하면 이전 호출에서 사전 추출_lated()를 무시하게 된다고 경고합니다. 두 가지 최적화를 결합하는 것은 의미가 없습니다.

1
`iterate()` 와 `prefetch_related()` 를 함께 사용하면 `QueryDefinitionError` 예외가 발생합니다.

모델 방법

각 모델 인스턴스에는 저장, 업데이트 또는 로드하는 일련의 방법이 있습니다.

로드

로드() 메서드를 호출하여 ForeignKey 관련 모델을 로드할 수 있습니다.

다른 프로세스에 의해 모델이 변경된 경우 로드()를 사용하여 데이터베이스에서 모델을 새로 고칠 수 있습니다.

!!!팁 모델 방법의 부하() 방법에 대해 자세히 알아보기

QuerysetProxy 방법

관련 ManyTo많이 필드 및 ReverseForeignKey에 직접 액세스하면 관련 모델 목록이 반환됩니다.

그러나 쿼리 세트 API의 하위 집합도 표시되므로 상위 모델에서 직접 필터링, 생성, 관련 모델 선택 등을 할 수 있습니다.

겟

작동 원리는 위의 get 함수와 정확히 동일하지만 관계의 다른 끝에서 관련 개체를 검색할 수 있습니다.

!!!QuerysetProxy에 대해 자세히 알아보려면 QuerysetProxy 섹션을 방문하십시오.

얻거나 아무것도

이는 위에서 설명한 것과 정확히 동일하지만 기준과 일치하는 데이터베이스 레코드를 찾을 수 없으면 예외가 발생하는 대신 없음이 반환됩니다.

!!!QuerysetProxy에 대해 자세히 알아보려면 QuerysetProxy 섹션을 방문하십시오.

획득 또는 생성

위의 get_ 또는 _ create 함수와 정확히 동일하지만 관계의 다른 쪽 끝에서 관련 개체를 쿼리하거나 만들 수 있습니다.

!!!QuerysetProxy에 대해 자세히 알아보려면 QuerysetProxy 섹션을 방문하십시오.

먼저

위의 첫 번째 함수와 동일하지만 관계의 다른 쪽 끝에서 관련 개체를 쿼리할 수 있습니다.

!!!QuerysetProxy에 대해 자세히 알아보려면 QuerysetProxy 섹션을 방문하십시오.

모두

위의 모든 기능과 동일하지만 관계의 다른 쪽 끝에서 관련 개체를 쿼리할 수 있습니다.

!!!QuerysetProxy에 대해 자세히 알아보려면 QuerysetProxy 섹션을 방문하십시오.