거래
비동기 쿼리를 발행하는 데 사용되는 인코딩/데이터베이스로 인해 데이터베이스 트랜잭션이 지원됩니다.
기본 용도
트랜잭션을 사용하려면 ase.를 비동기 컨텍스트 관리자로 사용하십시오.
| 데이터베이스 트랜잭션과 비동기화():
# 여기에서 호출되는 모든 것은 하나의 거래가 될 것입니다.
모델 1()을 기다립니다.저장()
모델 2()를 기다립니다.저장()
...
|
!!!모델의 ormar_config 개체에 사용된 것과 동일한 데이터베이스여야 합니다.
코드에서 데이터베이스 인스턴스가 전달되지 않도록 각 모델에서 인스턴스를 추출할 수 있습니다. ormar 동안 제공된 데이터베이스. 모델 선언은 ormar_config를 통해 사용할 수 있으며 클래스 및 인스턴스에서 액세스할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 | 데이터베이스 가져오기
sqlalchemy 가져오기
오마르 가져오기
base_ormar_config = OrmarConfig (
메타데이터 = sqlalchemy. 메타데이터(),
데이터베이스 = 데이터베이스. 데이터베이스("sqlite://"),
)
클래스 작성자(ormar. 모델):
ormar_config = base_ormar_config 사본()
ID: int = ormar. 정수(prial_key = 참)
이름: str = ormar. 문자열(max_long = 255)
# 데이터베이스는 클래스에서 액세스할 수 있습니다.
데이터베이스 = 작성자 ormar_config 데이터베이스
# 인스턴스뿐만 아니라
저자 = 저자 (이름 = "스티븐 킹")
데이터베이스 = . ormar_config
|
.()를 비동기 함수의 함수 데코레이터로 사용할 수도 있습니다.
| @ase. ()
비동기 def create_(요청):
...
|
트랜잭션 블록은 태스크 로컬 상태로 관리됩니다. 중첩된 트랜잭션은 데이터베이스 저장 지점을 사용하여 완전히 지원되고 구현됩니다.
수동 커밋/롤백
낮은 수준의 거래 API의 경우 수동으로 트리거할 수 있습니다.
| 트랜잭션 = 데이터베이스를 기다립니다. 트랜잭션()
시도:
거래 대기 중. 시작 ()
...
제외:
거래 대기 중. 롤백 ()
기타:
거래 대기 중. 커밋()
|
테스트
트랜잭션은 강제 롤백을 적용할 수 있고 각 테스트 후에 데이터를 정리할 필요가 없는 테스트 중에도 유용합니다.
| @Pytest.mar.asyncio
Async def sample_est ():
데이터베이스와 비동기화:
ase.와 비동기화(force_roll back = True):
# 여기 테스트 코드
...
|