릴리스 노트
0.20.1
✨ 주요 변경 사항
- 이것은 Pydantic v2를 지원하는 Ormar의 첫 번째 비 베타 릴리스입니다. 0.20.0 릴리스 노트 및 https://collerek.github.io/ormar/0.20.0b1/migration/
🐛 수리
- 선택_lated 및 프리페치_lated#906을 사용할 때 동일한 대상 모델 병합 수정
- PK 전용 모델과 관련된 저장 문제 해결#812
- 동일한 관계를 여러 번 추가하면 관계 캐시 #1335가 손상됩니다.
✨ 특징
- @cmflynn#1276을 통해 외부 키 인덱스 추가 허용
💬기타
- @ Chaingz가 문서를 수정했습니다. 감사합니다!
0.20.0
✨ 주요 변경 사항
-
오마르, 모델 구성
이제 각 ormar 모델에는 메타 클래스를 정의하는 대신 OrmarConfig 클래스의 인스턴스인 ormar_config 매개 변수가 필요합니다. 속성의 이름은 ormar_config이고 config 클래스의 인스턴스여야 합니다.
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
데이터베이스 가져오기 오마르 가져오기 sqlalchemy 가져오기 데이터베이스 = 데이터베이스. 데이터베이스("sqlite://db.sqlite") 메타데이터 = sqlalchemy. 메타데이터() # ormar <0.20 클래스 앨범(ormar. 모델): 클래스 메타: 데이터베이스 = 데이터베이스 메타데이터 = 메타데이터 테이블 이름 = "앨범" ID: int = ormar. 정수(prial_key = 참) 이름: str = ormar. 문자열(max_long = 100) 즐겨찾기: bool = ormar. 부울(기본값 = 거짓) # ormar > = 0.20 클래스 앨범 V20(ormar. 모델): ormar_config = ormar. OrmarConfig ( 데이터베이스 = 데이터베이스, 메타데이터 = 메타데이터, 테이블 이름 = "s_v20" ) ID: int = ormar. 정수(prial_key = 참) 이름: str = ormar. 문자열(max_long = 100) 즐겨찾기: bool = ormar. 부울(기본값 = 거짓) -
OrmarConfig api/매개 변수
Ormar_config는 메타 클래스에서 제공하는 동일한 설정 집합을 표시합니다. 즉, 다음 매개 변수 중 하나로 구성을 초기화할 수 있습니다.
1 2 3 4 5 6 7 8 9 10
메타데이터: 옵션 [sqlalchemy. 메타데이터] 데이터베이스: 옵션 [데이터베이스. 데이터베이스] 엔진: 옵션 [sqlalChemy.. 엔진] 테이블 이름: 옵션 [str] order_by: 옵션 [목록 [str]] 추상: 볼 __field: 옵션 [목록 [str]] queryset_클래스: [Queryset]을 입력합니다. 추가: 추가 제약 조건: 선택 사항 [목록 [ColumnCollectionConstraint]] -
BaseMeta 동등성 - 모범 사례
코드 중복을 줄이고 개발을 단순화하기 위해서는 기본 구성을 만들고 각 모델의 사본을 제공하는 것이 좋습니다. OrmarConfig는 이를 위한 편리한 복제 방법을 제공합니다.
복사 메서드는 OrmarConfig init와 동일한 인수를 사용하므로 필요에 따라 재정의할 수 있지만 기본적으로 테이블 이름, 순서 _by 및 기본적으로 지워지는 제약 조건을 제외하고 기존 속성을 반환합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
데이터베이스 가져오기 오마르 가져오기 sqlalchemy 가져오기 base_ormar_config = ormar. OrmarConfig ( 데이터베이스 = 데이터베이스. 데이터베이스("sqlite://db.sqlite"), 메타데이터 = sqlalchemy. 메타데이터() ) 클래스 앨범 V20(ormar. 모델): ormar_config = base_ormar_config 사본( 테이블 이름 = "s_v20" ) ID: int = ormar. 정수(prial_key = 참) 이름: str = ormar. 문자열(max_long = 100) 클래스 트랙 V20(ormar. 모델): ormar_config = base_ormar_config 사본( 테이블 이름 = "_v20" ) ID: int = ormar. 정수(prial_key = 참) 이름: str = ormar. 문자열(max_long = 100) -
옵션 필드 매개변수는 더 이상 지원되지 않습니다.
버전 0.20 이전에 기존 ormar 필드에 옵션 인수를 제공하여 허용 가능한 값을 제한할 수 있습니다. 이 기능은 제거되었으며 ormar를 사용해야 합니다. 이를 위해 설계된 열거형 필드. 데이터베이스 필드 유형(즉, 정수 필드)을 보존하려면 언제든지 사용자 지정 검증기를 작성할 수 있습니다.
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 36
데이터베이스 가져오기 오마르 가져오기 sqlalchemy 가져오기 데이터베이스 = 데이터베이스. 데이터베이스("sqlite://db.sqlite") 메타데이터 = sqlalchemy. 메타데이터() # ormar <0.20 클래스 아티스트(ormar. 모델): 클래스 메타: 데이터베이스 = 데이터베이스 메타데이터 = 메타데이터 ID: int = ormar. 정수(prial_key = 참) 이름: str = ormar. 문자열(max_long = 100) 국가: str = ormar. 문자열(기본값 = 거짓, max_long = 50, 선택 = ["영국", "미국", "베트남", "콜롬비아"]) # ormar > = 0.20 열거형에서 열거형 가져오기 클래스 국가(str, Enum): 영국 = "영국" 미국 = "미국" 베트남 = "베트남" 콜롬비아 = "콜롬비아" 클래스 아티스트 V20(ormar. 모델): ormar_config = ormar. OrmarConfig ( 데이터베이스 = 데이터베이스, 메타데이터 = 메타데이터, 테이블 이름 = "arts_v20" ) ID: int = ormar. 정수(prial_key = 참) 이름: str = ormar. 문자열(max_long = 100) 국가: 국가 = ormar. 에넘(enum_클래스 = 국가) -
Pydantic_만 더 이상 필드 매개 변수를 지원하지 않습니다.
pydantic_ 전용 필드는 v 0.20에서 더 이상 사용되지 않고 제거되었습니다. Ormar를 사용하면 pydantic 필드를 일반 pydantic 모델처럼 정의할 수 있습니다.
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
데이터베이스 가져오기 오마르 가져오기 sqlalchemy 가져오기 데이터베이스 = 데이터베이스. 데이터베이스("sqlite://db.sqlite") 메타데이터 = sqlalchemy. 메타데이터() # ormar <0.20 클래스 접시(ormar. 모델): 클래스 메타: 데이터베이스 = 데이터베이스 메타데이터 = 메타데이터 테이블 이름 = "접시" ID: int = ormar. 정수(prial_key = 참) 이름: str = ormar. 문자열(max_long = 100) 요리사: str = ormar. 문자열(max_long = 40, pydantic_Only = 참, 기본값 = "sam") # ormar > = 0.20 클래스 DishV20(ormar. 모델): ormar_config = ormar. OrmarConfig ( 데이터베이스 = 데이터베이스, 메타데이터 = 메타데이터, 테이블 이름 = "s_v20" ) ID: int = ormar. 정수(prial_key = 참) 이름: str = ormar. 문자열(max_long = 100) 요리사: str = "sam" # 이것은 일반 피단트 필드입니다. -
더 이상 속성 _field 데코레이터를 지원하지 않습니다.
속성 _field 데코레이터는 모델의 사전/직렬화된 JSON 표현에 포함된 계산된 필드를 전달하는 방법을 제공하는 데 사용됩니다. Pydantic 2. X 버전은 이러한 가능성을 도입했으므로 이제 Pydantic 네이티브 버전으로 전환해야 합니다.
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 36
데이터베이스 가져오기 오마르 가져오기 sqlalchemy 가져오기 피단틱 가져오기 데이터베이스 = 데이터베이스. 데이터베이스("sqlite://db.sqlite") 메타데이터 = sqlalchemy. 메타데이터() # ormar <0.20 클래스 직원(ormar. 모델): 클래스 메타: 데이터베이스 = 데이터베이스 메타데이터 = 메타데이터 ID: int = ormar. 정수(prial_key = 참) 첫 번째 이름: str = ormar. 문자열(max_long = 100) 성: str = ormar. 문자열(max_long = 100) @Ormar.ty_field () Def full_name (자체) -> str: f "{self.first_name}{self.last_name}"를 반환합니다. # ormar > = 0.20 클래스 직원 V20(ormar. 모델): ormar_config = ormar. OrmarConfig ( 데이터베이스 = 데이터베이스, 메타데이터 = 메타데이터, ) ID: int = ormar. 정수(prial_key = 참) 첫 번째 이름: str = ormar. 문자열(max_long = 100) 성: str = ormar. 문자열(max_long = 100) @ Pydantic ted_field () Def full_name (자체) -> str: f "{self.first_name}{self.last_name}"를 반환합니다. -
더 이상 사용되지 않는 방법
아래에 나열된 모든 방법은 사용되지 않았으며 Ormar 버전 0.30에서 제거됩니다.
-
Dict()가 모델이 됩니다 _dump()
데이터베이스 가져오기 오마르 가져오기 sqlalchemy 가져오기
데이터베이스 = 데이터베이스. 데이터베이스("sqlite://db.sqlite") 메타데이터 = sqlalchemy. 메타데이터()
클래스 앨범(ormar. 모델): ormar_config = ormar. OrmarConfig ( 데이터베이스 = 데이터베이스, 메타데이터 = 메타데이터, 테이블 이름 = "앨범" )
1 2 3
ID: int = ormar. 정수(prial_key = 참) 이름: str = ormar. 문자열(max_long = 100) 즐겨찾기: bool = ormar. 부울(기본값 = 거짓)앨범 = 앨범 (이름 = "달의 어두운 면")
ormar <0.20
al_dict = alum.dict ()
ormar > = 0.20
new_al_dict = alum.model_dump ()
매개 변수는 동일하게 유지됩니다(예: 포함, 제외 등).
-
JSON()이 모델 _dump_json()이 됩니다.
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
데이터베이스 가져오기 오마르 가져오기 sqlalchemy 가져오기 데이터베이스 = 데이터베이스. 데이터베이스("sqlite://db.sqlite") 메타데이터 = sqlalchemy. 메타데이터() 클래스 앨범(ormar. 모델): ormar_config = ormar. OrmarConfig ( 데이터베이스 = 데이터베이스, 메타데이터 = 메타데이터, 테이블 이름 = "앨범" ) ID: int = ormar. 정수(prial_key = 참) 이름: str = ormar. 문자열(max_long = 100) 즐겨찾기: bool = ormar. 부울(기본값 = 거짓) 앨범 = 앨범 (이름 = "달의 어두운 면") # ormar <0.20 앨범_json = alum.json () # ormar > = 0.20 new_al_dict = album .model_dump_json ()매개 변수는 동일하게 유지됩니다(예: 포함, 제외 등).
-
구성()이 모델 _ 구성()이 됩니다.
데이터베이스 가져오기 오마르 가져오기 sqlalchemy 가져오기
데이터베이스 = 데이터베이스. 데이터베이스("sqlite://db.sqlite") 메타데이터 = sqlalchemy. 메타데이터()
클래스 앨범(ormar. 모델): ormar_config = ormar. OrmarConfig ( 데이터베이스 = 데이터베이스, 메타데이터 = 메타데이터, 테이블 이름 = "앨범" )
1 2 3
ID: int = ormar. 정수(prial_key = 참) 이름: str = ormar. 문자열(max_long = 100) 즐겨찾기: bool = ormar. 부울(기본값 = 거짓)Params = { "이름": "달의 어두운 면", "즐겨찾기": 사실, }
ormar <0.20
앨범 = 앨범. 구성 (** params)
ormar > = 0.20
앨범 = model_ (** params)
구조에 대해 자세히 알아보려면 Pydantic 문서를 참조하십시오.
-
0.12.2
✨
- FastAPI 지원을 최신 버전으로 업그레이드하십시오(0.97.0)
- Python 3.11 #1110에 대한 지원 및 테스트 추가
0.12.1
✨
- 모델 및 관련 모델의 재귀 로딩 및 캐싱으로 인해 로딩 모델의 성능이 크게 향상되었습니다. (@erichaydel - 감사합니다!) #853
💬내부 구조
- 구현된 추세 변경의 성능 효과를 비교하는 벤치마크(다시 한 번 @erichaydel - 감사합니다!) #853
0.12.0
✨ 주요 변경 사항
- Queryset.bulk_create가 이제 ModelList를 올립니다.빈 모델 목록에 오류가 있습니다(by @ponyailer - 감사합니다!) #853
✨
- Model.up()는 이제 플래그 __force\를 처리합니다._저장__: bool, 기본 키 세트가 있는지 여부에 관계없이 삽입 모델을 업데이트할 수 있습니다. 이 플래그를 설정하면 각 업데이트 삽입 모델에 대해 두 개의 쿼리가 발생합니다. -> 모델이 존재하는지 확인하고 나중에 업데이트/삽입합니다. 889장
🐛
- 생성자를 깨뜨린 빈 관계를 수정했습니다(@Abdeldjalil-H - 감사합니다!) #870
- pks 세트(uuid 포함)로 모델을 저장하지 않는 저장 관련 문제 해결 #885
- 제외 순서에 따라 잘못된 관계 제외 수정 #779
- 속성 수정_필드가 올바르게 상속되지 않음#774
0.11.3
✨
- 는 ForeignKey에서 업데이트 및 삭제 참조 작업을 기록하고 관계의 동작을 지정하는 참조 작업 열거를 제공합니다(@SepehrBazyar - 감사합니다!) #724
- 모델 메타에서 지원되는 제약 조건에 확인란 추가(@SepehrBazyar - 감사합니다!) #729
🐛
- 쿼리 결과를 0으로 제한하면 빈 목록이 반환됩니다(@SepehrBazyar - 감사합니다!) #766
다른 💬
- 설명서에 다크 모드 추가(@SepehrBazyar - 감사합니다!) #717
- aiomysql 종속성 업데이트 #778
0.11.2
🐛
- 데이터베이스 드라이버를 복구해야 하며 선택 사항이어야 합니다.
- Postgres#704의 제한 없이 제한 쿼리에서 부울 필드 문제 수정
- OpenAPI#699에서 오류를 일으키는 스키마에 대한 enum_클래스 오버플로를 수정합니다.
0.11.1
🐛
- Pydantic 1.9#685에 도입된 심층 복제 문제 해결
0.11.0
✨ 주요 변경 사항
- Python 3.6에 대한 지원을 삭제합니다.
- Queryset.get_or_create Now는 모델이 포함된 튜플과 모델이 생성되었는지 여부를 나타내는 부울을 반환합니다(@MojixCoder - 감사합니다!) #554
- Queryset.카운트()는 이제 기본적으로 다른 상위 모델 행의 수를 계산합니다. 고유 = 거짓(@erichaydel - 감사합니다) #588을 설정하여 모든 행을 계산할 수 있습니다.
✨
- 파이썬 3.10 지원 추가
🐛
- 저장 및 대량 생성에서 일관성이 없는 JSON 필드 동작 수정
- 최대 재귀 오류 수정 #580
0.10.25
✨
- 는 모델에 queryset_클래스 옵션을 추가합니다. 메타, Queryset을 모델로 쉽게 교체할 수 있도록 합니다(@ponyailer - 감사합니다!) #538
- 를 사용하면 추가 kwargs를 IndexCol로 전달할 수 있으며, 이 인덱스는 sqlalchemy 인덱스로 전달됩니다(@zevisert - 감사합니다) #575
🐛
- JSON 필드에 대한 nullable 설정 수정 #529
- 는 json 대신 orjson을 사용할 때 배치 작업에서 바이트/str 불일치를 수정합니다(by @ponyailer - 감사합니다!) #538
0.10.24
✨
- 포스트 _bulk_ 신호 추가 (by @ponyailer - 감사합니다!) #524
🐛
- pydantic ==1.9.0#502에 대한 고정 지원
- 날짜 및 시간에 대한 시간대 문제 수정 #504
- 쿼리 생성에서 리터럴 바인딩을 제거하여 Postgres 어레이 #/tophat/ormar-postgres-extensions/9 잠금 해제
- JSON 필드의 배치 업데이트 수정 #519
다른 💬
- 는 데이터베이스 실행_많은 차선책 구현을 우회하여 대량_생성 성능을 향상시킵니다. (@Mng-dev-ai 감사!) #520
- 임팩트 분. 필수 데이터베이스 버전은 > = 5.4입니다.
0.10.23
✨
- 열을 만들 때 댓글을 sqlalchemy에 전달하는 기능 추가 #485
🐛
- 비어 있을 수 있는 큰 이진 필드 수정 #409
- 오마르를 만드십시오. 모델 사용 가능 #413
- 먼저 ()를 만들고 () 매개 변수 없이 사용자가 설정한 기본 모델의 순서를 존중하고 기본 키로 돌아갑니다(각각 asc 및 desc) #453
- Postgress #455의 비별칭 조인 절에 대한 잘못된 참조 수정
0.10.22
🐛
- 상위 ormar 모델을 설정할 때 상속되지 않는 검증자에 대한 핫 수정 #365
0.10.21
🐛
- 는 입력을 검증하지 않고 모델 인스턴스를 구축하여 전체 프로세스 속도를 높일 수 있는 생성자 클래스 방법의 ormar 구현을 추가합니다(데이터가 이미 검증된 경우). #318
- 는 get_pydantic#365를 사용하여 새로 생성된 pydanic 모델을 생성할 때 ormar 모델에서 필드 검증자를 "상속"하는 문제를 해결합니다.
0.10.20
✨
- 는 모델에 추가 매개 변수를 추가합니다. Extra. 및 Extra.for(기본값)를 수락하고 ormar 모델에 전달된 추가 필드를 무시하거나 예외가 발생하면 예외를 발생시키는 메타 #358
🐛
- 필드가 nullable이고 옵션이 #354로 설정된 경우 "없음"은 허용되지 않습니다.
- 자동 증가 및 명시적 null 가능 설정에 관계없이 마이그레이션 문제를 방지하려면 항상 Primary _key를 null이 아닌 것으로 설정하십시오 #348
0.10.19
✨
- Meta. #307에서 고유하지 않은 다중 열 인덱스 열에 대한 지원 추가
- 는 sql_nullable 필드 속성을 추가하여 pydantic 모델과 기본 sql 열에 대해 다양한 nullable 설정을 허용합니다 #308
🐛
- 성능 향상을 위한 다이어그램 캐싱 사용 #337
- nullable 필드에 대한 문서 명확화 및 수정 #339
다른 💬
- 지원되는 데이터베이스 버전을 <= 5.2로 업그레이드하십시오.
0.10.18
🐛
- pydantic 모델의 필드 순서 수정 #328
- 데이터베이스 복구0.5.0지원 #142
0.10.17
✨
- 모델 필드를 재정의할 수 있는 기본 피단틱 유형 #312
- sqlalchemy에 대한 지원 추가 > = 1.4 (데이터베이스 필요 > = 0.5.0) #142
0.10.16
✨
- 를 사용하면 자신의 피단틱 구성을 ormar에 전달할 수 있습니다. @alethic에 의해 기본 구성과 병합되는 모델(감사합니다!) #285
- @ProgrammerPlus1998을 통해 작은 정수 필드 유형 추가(감사합니다!) #297
🐛
- 스키마 #291에 직접 노출된 오래된 피단틱 필드 매개 변수를 제거하여 고정 생성 OpenAPI 스키마
- 모델 #295를 통해 자동으로 생성되는 불필요한 경고 수정
0.10.15
🐛
- 중첩 모델을 사용하여 피단틱 모델 트리를 생성하는 문제를 해결합니다(by @paoy - 감사합니다!) #278
- 기본 키 필드 누락에 대한 경고에서 누락된 f 문자열 수정 #274
- 외국 키 값을 관계로 고정 전달(추가 보호, 최신 버전에서 고정) #270
0.10.14
✨
- 를 사용하면 시간대 인식 데이터베이스 열 #264의 날짜 및 시간 필드에 시간대: bool = 거짓 매개 변수를 전달할 수 있습니다.
- 를 사용하면 날짜 시간, 시간 및 날짜 필드에서 필터링할 날짜 시간, 날짜 및 시간을 전달하여 값을 문자열로 변환하는 대신 날짜 시간별로 필터링할 수 있습니다.
🐛
- cycopg2에서 cycopg2- #255로 종속성을 수정합니다.
0.10.13
✨
-
를 사용하면 필드 접근자를 선택 _lated 및 프리페치 _lated로 통과시킬 수 있습니다. 파이썬 스타일 선택 _ 관련 #225.
-
이전:
Post.ts.t_(["저자", "카테고리"])를 기다립니다. 기다리다 권한.ts.prefetch_("s__").get()
-
이제 또한:
Post.ts.t_([Post.author, Post.]).get()을 기다립니다. 기다리다 권한.ts.prefetch_ (권한.post 카테고리).get ()
-
🐛
- 상속된 기본 키의 기본값 재정의 수정 #253
0.10.12
🐛
- Init을 사용하지 않는 QuerySet.create 방법 수정(사용자 지정이 제공되는 경우) #245
- 수정ForwardRefManyToMany관계 설정 잘못된 피단틱 유형 #250
0.10.11
✨
- 는 값과 값 _list를 Query세트 및 QuerysetProxy에 추가하여 원래 데이터 소스를 쿼리 #223에서 반환할 수 있습니다.
- 쿼리에서 튜플 또는 사전 목록을 반환할 수 있습니다.
- 데이터를 ormar 모델로 분석하는 것을 건너뛰고 따라서 검증을 건너뜁니다.
- 관계형 체인 간에 모델을 제외할 수 있으므로 필요한 열만 추출할 수 있습니다.
- 하나의 열만 추출된 경우 _list 값을 사용하여 결과를 평평하게 만들 수 있습니다.
🐛
- ForwardRef #226을 사용하여 m2m 관계형 모델을 통한 자동화 생성
0.10.10
✨
- 는 get_pydantic 플래그를 추가하여 ormar에서 동등한 pydantic 모델 트리를 자동으로 생성할 수 있습니다. 모델. 새로 생성된 이 모델 트리는 요청 및 응답에 사용하여 데이터에 포함하지 않을 필드를 제외할 수 있습니다.
- 는 모델 메타에 예외 __field 매개 변수를 추가하여 상속 중에 상위 모델에서 필드를 제외할 수 있습니다. 모델과 믹스를 결합하는 것이 가장 좋은 방법이지만 유사한 모델이 많고 다른 모델이 하나뿐이라면 이 목표를 달성하는 데 유용한 도구가 될 수 있습니다.
🐛
- 페이징 및 관계로 빈 필터 수정(@erichaydel의 정중함) #214
- 수정 #216 이전에 저장되지 않은 경우 하위 개체는 관계의 뒷면에 저장되지 않습니다.
다른 💬
- 문서의 FastAPI 섹션을 확장하여 FastAPI 요청 및 응답에서 Ormar를 사용하는 예를 보여 줍니다.
- 기본값, ForeignKey.add 등에 대한 문서가 개선되었습니다.
0.10.9
# # 중요한 보안 수정
- 보안 버그를 수정하기 위해 피단틱 핀 업데이트 CVE-2021-29510
패치 버전의 pydantic으로 업데이트하는 것이 좋습니다. 0.10.9에서 ormar는 고정 종속성에 취약성이 있는 버전을 제외합니다.
🐛
- 큰 바이너리의 OpenAPI 아키텍처 수정 #204
0.10.8
🐛
- pk_ 전용 하위 모델 #202에서 패딩 기본값 수정
- base64 str 표현을 사용하여 큰 이진 필드에 대한 mypy # 199 수정
- Base64 str 표현 #199를 사용하여 큰 이진 필드에 대한 OpenAPI 스키마 형식 수정
- Base64 str 표현을 사용하여 큰 이진 필드에 대한 OpenAPI 선택 인코딩 수정
0.10.7
✨
exclude_primary_keys: bool = False태그를 dict() 메서드에 추가하여 결과 사전의 모든 기본 키 열을 제외할 수 있습니다. 164장- 는
exclude_through_models: bool = Falsedict()의 플래그를 추가하여 모든 모델을 ManyToMan 관계에서 제외할 수 있도록 합니다. represent_as_base64_str: bool = False를 추가하여 바이트 큰 이진 필드를 base64 인코딩된 문자열 매개 변수로 변환할 수 있습니다. 속성에 액세스할 때 문자열은 dict()로 반환되고 문자열은 설정되면 바이트로 변환됩니다. 데이터베이스의 데이터는 바이트로 저장됩니다. 187장- Model.pk 필터의 필드에 액세스하고 절별로 정렬할 수 있도록 pk 별칭을 추가합니다(파이썬 스타일).
🐛
- 큰 이진 필드의 최대 _ 길이에 대한 기본 없음 옵션 제거
- 기본 제거 문자열 필드 max_long에 대한 없음 옵션
다른 💬
- 문서에서 판결() 매개 변수를 제공하기 위한 지침 및 예
- 매직 메소드의 속성을 설명자에게 가져오고 설정하는 주요 리팩토링 -> 상당한 성능 향상
0.10.6
✨
-
큰 이진수 추가(최대 _길이) 필드 유형 #166
-
는 이제 사용되지 않는 Pydantic_ 전용 속성 대신 일반 Pydantic 필드(모델 포함)에 대한 지원을 추가합니다. 피단트 필드는 ormar 필드 옆에 있는 피단트 모델에서와 같이 정상적으로 선언되어야 합니다. (분명히) ormar는 데이터베이스에 이 필드의 값을 저장하고 로드하지 않으므로 다음 중 하나가 사실이어야 합니다.
- ormar 모델에 선언된 Pydantic 필드는 선택 사항이어야 합니다(기본값은 없음).
- pydantic 필드를 기본값으로 설정해야 합니다.
- Pydantic 필드에는 기본 _공장 함수 집합이 있습니다.
- 피단트 필드가 있는 모델은 __init__()를 재정의하고 거기에 값을 제공해야 합니다.
데이터베이스에서 데이터를 로드하는 동안 위의 ormar(또는 오히려 pydantic) 중 하나도 실패하지 않고 선언된 pydantic 필드에 필요한 값이 누락된 경우.
-
Ormar는 이제 중첩된 모델을 포함하여 openapi 패턴에서 의미 있는 예를 제공합니다. dict()와 동일한 알고리즘을 사용하고 _all을 선택하여 보지 않고 관련 모델을 반복합니다. 예는 api에도 나타납니다. 157장
🐛
- 기본적으로 pydantic은 할당 중에 필드를 검증하지 않으므로 ORM에 이상적인 설정이 아닙니다. 이제 모든 ormar. 모델은 할당 중에 유효성 검사가 켜집니다(예: model.열 = '값').
다른 💬
- Reame #180의 QuickStart에서 데이터베이스에 연결 추가
- OpenAPI 아키텍처는 더 이상 ormar를 포함하지 않습니다. 설명으로 문서 문자열을 모델링합니다. 자신의 문서 문자열을 제공하지 않는 경우 모델 이름만 제공합니다.
- 일부 성능 향상.
0.10.5
🐛
- 빠른 페이지화에서 버그 수정 #73
- 는 QuerySet.all() 및 Querysetproxy.all() 반환 값의 목록[옵션[T]]에서 불필요한 옵션#174를 제거합니다.
- 실행 테스트 적용률은 GitHub 작업이 아닌 내부 PRS에서만 공개됩니다.
0.10.4
✨
- 는 던더 구분 문자열 대신 필드 액세스를 사용하여 파이썬 스타일의
filter및order_by를 추가합니다. 51장- 속성 액세스(도트 체인)를 통해 필드에 액세스하는 것을 사용하여 필터 그룹(ormar.and)을 구성할 수 있습니다. 그리고 오마.)
- 필드 액세스는 일련의 파이썬 연산자를 오버로드하고 **kwargs에서 던더 구분 매개 변수 이름과 동일한 기능을 허용하는 일련의 기능을 제공합니다. 이는 모델 앨범과 관련된 예제 모델 트랙을 의미합니다.
이제 더 많은 옵션이 있습니다.
- 정확한 - 값과 정확히 일치, sql 열 =
- old: __name__='Malibu.'
- New: Track.album.name==' Malibu로도 쓸 수 있습니다.
- 정확하지 않음 - 정확한 일치 sql 열 =
(대소문자 무감각) - 이전: 앨범__이름__i= '말리부'
- 새로운: 다음과 같이 쓸 수도 있습니다.
Track.album.name.iexact('malibu')
- 에는 '%
%'와 같은 sql 열이 포함되어 있습니다. - 이전: 앨범__이름__ 포함 = '말'
- New: Track.album.name% 'Mal'로도 쓸 수 있습니다)
- 새로운: 다음과 같이 쓸 수도 있습니다.
Track.album.name.contains('Mal')
- 아이콘 - '%
%'와 같은 sql 열 (대소문자 무감각) - 이전: 앨범 __이름__아이콘테인='mal.'
- 새로운: 다음과 같이 쓸 수도 있습니다.
Track.album.name.icontains('mal')
- -sql에서
column IN (<VALUE1>, <VALUE2>, ...)- 오래된:
album__name__in=['Malibu', 'Barclay'] - 새로운: 다음과 같이 쓸 수도 있습니다.
Track.album.name << ['Malibu', 'Barclay'] - 새로운: 다음과 같이 쓸 수도 있습니다.
Track.album.name.in_(['Malibu', 'Barclay'])
- 오래된:
- Isnull - sql 열이 NULL(및 sql 열이 NULL이 아님)
- old: __name__isnull=True(isnot null__name__isnull=거짓)
- New: Track.album.name>> 없음으로도 쓸 수 있습니다.
- 새로운: Track.album.name isnull로도 쓸 수 있습니다(참)
- New: not null은 다음과 같이 쓸 수도 있습니다.
Track.album.name.isnull(False) - New: not null은 ~(Track.album.name>> 없음)로 쓸 수도 있습니다.
- New: not null은 다음과 같이 쓸 수도 있습니다.
~(Track.album.name.isnull(True))
- gt - sql 열 >
(보다 큰) - 이전: 위치__gt=3
- 새로운 것: Track.album.name>3으로도 쓸 수 있습니다.
- gte - sql 열 > =
(보다 크거나 같음) - 이전: 위치__gte=3
- 새로운 것: Track.album.name로도 쓸 수 있습니다 > = 3
- lt - sql 열 <
(아래) - 이전: 위치__lt=3
- 새로운: Track.album.name <3으로도 쓸 수 있습니다.
- lte - sql 열 <=
(보다 작거나 같음) - 이전: 위치 __lte = 3
- 새로운 것: Track.album.name으로도 쓸 수 있습니다 <=3
- 시작 - sql 열 LIKE'
%'(정확한 시작 일치) - 이전: 앨범__이름__ 시작 = '말'
- 새로운: 다음과 같이 쓸 수도 있습니다.
Track.album.name.startswith('Mal')
- Istarswith - sql 열 Like'
%'(케이스 무감각) - 오래된:
album__name__istartswith='mal' - 새로운: 다음과 같이 쓸 수도 있습니다.
Track.album.name.istartswith('mal')
- 오래된:
- 끝 - sql 열 좋아요'%
(경기가 완전히 끝났습니다) - 이전: 앨범__이름__endswith='ibu.'
- 새로운: 다음과 같이 쓸 수도 있습니다.
Track.album.name.endswith('ibu')
- iendswith - sql 열 LIKE '%
' (대소문자 무감각) - old: __name__iendswith='IBU'
- 새로운: 다음과 같이 쓸 수도 있습니다.
Track.album.name.iendswith('IBU')
- 정확한 - 값과 정확히 일치, sql 열 =
- 필터() 및 ()를 제외하고 필터 그룹을 제공할 수 있을 뿐만 아니라 다음에서도 제공할 수 있습니다.
- 겟()
- 받든 말든 ()
- 가져오기 또는 만들기()
- 첫 번째 ()
- 모두()
- 삭제()
- 필터 그룹을 통해(ormar.and) 그리고 오마.), 이제 사용할 수 있습니다.
- 다음 단계 중첩 대신 &-as 및 _
- |- 다음 단계 중첩 대신 "또는 _"로
- ~ - 필터 그룹의 부정으로
-
여러 필터 세트를 하나의 조건 세트로 결합하려면 &(sql AND) 및 |(sql OR)를 사용하십시오.
1 2 3 4 5 6 7 8 9 10 11
# 다음 쿼리는 동일합니다. # sql: (product.name= '테스트' 및 제품.등급>=3.0) # ormar 옵션 1 - 오래된 것 제품.개체.필터(이름 = '테스트', rating__gte = 3.0).get () # ormar 옵션 2 - 오래된 것 제품.개체.필터(ormar.and_(이름 = '테스트', rating__gte = 3.0)).get() # ormar 옵션 3 - 새로운 옵션(현장 액세스) 제품.개체.필터(((Product.name=='테스트') & (제품.등급>=3.0)) .get() -
중첩된 복잡한 필터에도 동일하게 적용됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
# 다음 쿼리는 동일합니다. # sql: (product.name= '테스트' 및 제품.등급>=3.0) # 또는 (categories.name('장난감', '책')) # ormar 옵션 1 - 오래된 것 제품.개체.필터(ormar. 또는 _( Ormar.and_(이름 = '테스트', rating__gte = 3.0), 카테고리 __name__in = ['장난감', '책']) ). 얻다 () # ormar 옵션 2 - 새로운 것 (중첩되거나 `|` 를 사용하는 대신) 제품.개체.필터( Ormar.and_ (이름 = '테스트', rating__gte = 3.0) | Ormar. 및 _ (카테고리 __name__in = ['장난감', '책']) ). 얻다 () # ormar 옵션 3 - 새로운 옵션(현장 액세스) 제품.개체.필터( (((Product.name= '테스트') & (제품.등급>=3.0)) | (Product.categories.name<['장난감', '책']) ). 얻다 () -
이제 필드 액세스를 사용하여 주문_by()에 주문 액션을 제공할 수도 있습니다.
- 오름차순으로:
- 오래된:
Product.objects.order_by("name").all() - 새로운:
Product.objects.order_by(Product.name.asc()).all()
- 오래된:
- 내림차순:
- 오래된:
Product.objects.order_by("-name").all() - 새로운:
Product.objects.order_by(Product.name.desc()).all()
- 오래된:
- 물론 다양한 모델과 많은 주문을 결합할 수도 있습니다.
Product.objects.order_by([Product.category.name.asc(), Product.name.desc()]).all()
- 오름차순으로:
🐛 수리
- 실제로 버그가 아니라 불일치입니다. 중첩된 모델(예: 앨범_)로 필터를 제공합니다.카테고리__name='AA'는 앨범 및 카테고리 모델이 선택 항목에 포함되는지 여부를 확인하고 있습니다_늦은 시간()에 없으면 자동으로 추가됩니다. 필터 그룹(및 )에는 동일한 기능이 적용되지 않습니다. 그리고 또는 _), 이제 작동합니다(필터 그룹을 반환하는 파이썬 스타일 필터에서도 작동합니다).
0.10.3
✨ 특징
-
forigKey 및 ManyToMan은 이제 스킵 \ _ 리버스: bool = 거짓 플래그 # 118을 지원합니다. 내부적으로 스킵 \ _ 리버스 플래그를 설정한 경우 필드는 관계의 다른 쪽 끝에 여전히 등록되어 있으므로 다음을 수행할 수 있습니다.
- 역방향 모델의 관련 모델 필드별 필터링
- 리버스 모델에서 관련 모델 필드별로 _by 주문
그러나 당신은 할 수 없습니다:
- 관련 _name을 사용하여 역방향 모델에서 관련 필드에 액세스
- 모델의 반대쪽에서 상관 관계를 선택하더라도 반환된 모델은 역방향 인스턴스에 채워지지 않습니다(연결을 차단하지 않으므로 여전히 필터링하고 주문할 수 있습니다_by).
- 이 관계는 dict()와 json()으로 채워지지 않습니다.
- 는 dict() 또는 json()( ( ( ( ( ( ( ( ) )에서 채워졌을 때 중첩 된 관련 개체를 전달할 수 없습니다. ( ( )
-
Model.save_lated()는 이제 전체 데이터 트리를 한 번에 저장할 수 있습니다.
-
관계를 보존하기 위해 마스터 모델 또는 관련 모델을 먼저 저장해야 하는지 알고 있습니다.
-
마스터 모델을 저장합니다.
- 보존되지 않았습니다.
- pk 값 없음
- 또는 저장 _all = 참 플래그가 설정되었습니다.
이러한 경우 저장을 두 개의 호출로 나눌 필요가 없습니다(저장() 및 저장_lated())
-
또한 다대다 관계를 지원합니다.
-
또한 m2m 관계에 대한 모델 값을 통해 옵션을 지원합니다.
-
모델 관계 필드 이름으로 사용자 지정할 수 있는 가능성을 추가했습니다.
-
기본적으로 연결된 모델 이름은 모델 관계 이름으로 소문자입니다. 이와 같은 예에서 다음과 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
... ## 코스 선언 생략 클래스 학생(ormar. 모델): 클래스 메타: 데이터베이스 = 데이터베이스 메타데이터 = 메타데이터 ID: int = ormar. 정수(prial_key = 참) 이름: str = ormar. 문자열(max_long = 100) 과정 = ormar. 많은 것 (과정) ##는 다음과 같은 기본 모델을 생성합니다(예: 단순화). 클래스 학생 과정(ormar. 모델): 클래스 메타: 데이터베이스 = 데이터베이스 메타데이터 = 메타데이터 표 이름 = "학생_과정" ID: int = ormar. 정수(prial_key = 참) 학생 = ormar. 외국인 키(학생) 과정 = ormar. ForeignKey (과정) # 기본 이름 -
스루 모델에서 필드/관계 이름을 사용자 정의하려면 이제 ManyToMan의 새 매개 변수를 사용할 수 있습니다.
- __name - ManyToMan을 선언하는 모델로 이어지는 필드 이름을 통해
- ___name을 통해 ManyToLong이 이끄는 모델의 필드 이름으로 이동합니다.
예:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
... # 코스 선언 생략 클래스 학생(ormar. 모델): 클래스 메타: 데이터베이스 = 데이터베이스 메타데이터 = 메타데이터 ID: int = ormar. 정수(prial_key = 참) 이름: str = ormar. 문자열(max_long = 100) 과정 = ormar. 많은 것 (과정, 스루 _ 관계 _ 이름 = " 스루 _ 역방향 _ 관계 _ 이름 = " _id") #는 다음과 같은 기본 모델을 생성합니다(예: 단순화). 클래스 학생 과정(ormar. 모델): 클래스 메타: 데이터베이스 = 데이터베이스 메타데이터 = 메타데이터 표 이름 = "학생_과정" ID: int = ormar. 정수(prial_key = 참) 학생 _ id = ormar. 외국인 키(학생) _id = ormar. ForeignKey (과정)
🐛 수리
- 약점 수정 참조 오류 #118
- pydantic ConFig.="금지"를 설정할 때 필드를 통해 던져진 버그 수정
- 파이낸틱을 고칩니다. PrivateAttr는 _\에 없습니다._Init__초기화 오류 #149
- dict() 및 _\에서 pydantic 유형 제외 오류를 수정합니다._모두__key가 작동하지 않습니다
💬기타
- 모델 소개를 위한 sqlalchemistry-to-ormar 자동 번역기 링크
- Ormar를 지원하는 FastAPI 에코시스템 라이브러리에 대한 링크 제공
- 문서에 트랜잭션 추가(데이터베이스 지원)
0.10.2
✨ 특징
Model.save_related(follow=False)이제 두 가지 추가 매개 변수도 허용됩니다.Model.save_related(follow=False, save_all=False, exclude=None)...- 저장_all:bool -> 기본적으로 (그래서 저장_all=거짓) ormar 업데이트는 저장되지 않은 모델(따라서 새 모델 또는 업데이트된 모델)만 삽입합니다. 저장_all= 모든 관련 모델은 저장 상태에 관계없이 저장됩니다. 이는 다음과 같습니다. API 호출에서 모델을 업데이트하여 백엔드에서 변경되지 않도록 하는 것이 유용할 수 있습니다.
exclude: Union[Set, Dict, None]-> 다음 = 참 및 저장 _all = 참을 사용하더라도 저장에서 제외할 설정/사전 관계. 중첩된 관계를 제외하려면 중첩된 사전을 전달합니다. 예를 들어 다음과 같습니다.exclude={"child":{"sub_child": {"exclude_sub_child_realtion"}}}허용된 값은 필드 / 제외 \ _ 필드 (쿼리 세트에서) 메서드 스키마를 따르므로 확실하지 않은 경우 쿼리의 설명서를 참조할 수 있습니다 -> 워드 세트 선택 -> 필드
- Model.() 메서드는 이제 업데이트할 열 이름 목록을 허용하는 _: List[str] = 없음 매개 변수를 허용합니다. 통과되면 해당 열만 데이터베이스에서 업데이트됩니다. 업데이트()는 모델의 인스턴스를 새로 고치지 않으므로 _ 목록에서 전달한 것보다 더 많은 열을 변경하면 모델 인스턴스의 값이 데이터베이스와 다릅니다!
- Model.Model_dump() 메서드는 이전에 직접 관련된 모델 또는 중첩 모델만 포함했습니다(가상이 아닌 경우). 이제 루프 없이 이전에 액세스하지 못한 모든 관련 모델이 dict()에 포함됩니다. 더 많은 데이터가 사전에 버려지기 때문에 이것은 깨지지 않아야 하지만 잃어버려서는 안 됩니다.
QuerySet.delete(each=False, **kwargs)이전에 필터를 전달하라는 요청을 받았습니다(경유 **Kwargs는 별도의 필터() 호출로 설정하거나 각 = True를 설정하면 이제 NO 필터를 생성하는 배타적() 호출도 허용됩니다. 따라서 전체 테이블을 제거하거나 하나 이상의 필터/제외 절을 제거하려면 각 = True를 설정해야 합니다.- 필터를 통과하도록 요구하기 전에
QuerySet.update(each=False, **kwargs)에도 동일한 사항이 적용됩니다(**kwargs를 통해 또는 별도의 필터() 호출로). 또는 각각을 설정하기 전에 = True도 예외(NO 필터를 생성)를 허용합니다. ) 호출. 따라서 전체 테이블을 업데이트하거나 하나 이상의 필터/제외 절을 업데이트하려면 각 = True를 설정해야 합니다. - 동일한 것이 적용됩니다
QuerysetProxy.update(each=False, **kwargs)또한 필터를 통과해야 합니다(경유 **Kwargs는 별도의 필터() 호출로 설정하거나 각 = True를 설정하면 이제 NO 필터를 생성하는 () 호출을 제외하고도 허용됩니다. 따라서 전체 테이블을 업데이트하려면 각 = True를 설정하거나 하나 이상의 필터/제외 절을 설정해야 합니다.
🐛 수리
- fk 열에 다른 데이터베이스 별칭이 있는 경우 QuerysetProxy에서 잘못된 관계 필드 해상도를 수정합니다.
- dict()를 호출할 때 루프가 있는 매우 복잡한 모델 구조를 가진 재귀 버그를 수정했습니다.
- 관계형이 아닌 두 개의 필드가 관계형이 아닐 때 쿼리 결과에 병합(추가)되었을 때 버그 수정(예: JSON)
- 목록에서 사전으로 번역하는 동안 체인에서 동일한 관계 이름을 사용했지만 다른 모델을 만든 버그를 수정했습니다.
- 속성 _field 데코레이터 및 pydantic 필드를 저장하려고 할 때 대량 수정 _ 생성 오류
- 역방향 관계를 가진 깊은 중첩 체인의 잘못된 병합 수정
💬기타
- 성능 최적화
- 테스트 영역을 기준으로 테스트를 패키지로 분할
0.10.1
특징
- 는 get_ 또는_ no(**kwargs) 메서드를 Queryset 및 QuerysetProxy에 추가합니다. get(**kwargs)과 정확히 동일하지만 조건과 일치하는 데이터베이스 레코드가 없으면 get_ 또는_ no는 ormar를 올리지 않습니다. NoMatch 예외 및 간단히 없음을 반환합니다.
수리
- 순서 _by 절의 방언 관련 열 이름 및 테이블 이름 참조가 posgres에서 제대로 작동하지 않는 문제를 해결합니다.
0.10.0
휴식
- ormar 필드를 유형 힌트로 사용하는 오랫동안 사용되지 않은 필드 정의 표기법에 대한 지원을 제거했습니다.
test_field: ormar.Integger() = None - 개선된 유형 힌트 -> mypy는 관련 모델 필드(ForeignKey 및 ManyToLong)와 쿼리 세트 방법의 반환 유형을 올바르게 해결할 수 있습니다. 언급된 사람들은 이제 ormar 대신 올바른 모델(즉, 책)을 반환합니다. 모델 유형. QuerysetProxy 메서드의 관계와 역방향에는 여전히 문제가 있어 이제 Any. 부분 수정 #112.
특징
- 는
select_all(follow: bool = False)Queryset 및 QuerysetProxy에 대한 메소드를 추가합니다. 모델의 로드_all() 메서드와 유사하지만 쿼리에서 직접 사용할 수 있습니다. 기본적으로 _all()을 선택하면 직접 관련된 모델만 추가되고 팔로우하면 = True도 관계에서 루프하지 않고 관련 모델의 관련 모델을 추가합니다. 비동기 모델이 아니며 종료되므로 _all()을 선택하면 필드() 또는 순서_by()와 같은 쿼리 세트(또는 프록시)가 반환되기 때문에 get(), all() 등을 발행해야 합니다.
내부 구조
- Ormar 필드는 더 이상 Meta.Model_field 사전에 클래스로 저장되지 않고 인스턴스로 저장됩니다.
0.9.9
특징
- 관계 및 모델의 기본 순서를 변경할 수 있는 가능성을 추가합니다.
- 모델 순서를 변경하려면 순서를 _by=[열]로 전달합니다. 여기서 열: 목록[str]을 모델 메타 클래스로 보냅니다.
- 관계 순서 _by를 변경하려면 순서 _by=[열]을 전달합니다. 여기서 열: 목록[str]
- 역관계 순서를 변경하려면 _by 패스 관련 _order_by=[] 여기서 열: 목록[str]
- 매개 변수는 열 이름 또는 -{col_name}가 내림차순으로 정렬될 수 있습니다.
- 관계에서 직접 관련된 모델 열로만 정렬할 수 있으며 다대다 열의 경우 모델 열로 정렬할 수도 있습니다.
"{through_field_name}__{column_name}" - 주문_by 절은 다음 순서로 적용됩니다.
- 쿼리에서 _by() 호출을 명시적으로 전달합니다.
- 명령에 의한 관계가 있는 경우_by
- 모델 메타 클래스 주문_by
- 기본 키 열 ASC 모델(폴백, 위의 항목이 제공되지 않은 경우 사용)
- 네 가지 새로운 집계 함수를 추가합니다. > min, max, 합계 및 avg는 해당 SQL 등가입니다.
- 관련 열을 포함하여 하나 이상의 열 이름을 전달할 수 있습니다.
- 현재 전달된 각 열은 개별적으로 집계됩니다(따라서 합계(col1 + col2)는 불가능하므로 합계(col1, col2)를 사용한 다음 파이썬으로 반환된 2의 합계를 추가할 수 있습니다).
- 숫자가 아닌 열을 합하거나 평균할 수 없습니다.
- 열이 집계되면 단일 값이 결과로 직접 반환됩니다.
- 여러 열을 집계하는 경우 다음 열과 함께 사전을 반환합니다. 결과 쌍
- 는 4개의 새로운 신호를 추가합니다. -> pre__추가, post__추가, pre__제거 및 post__제거
- 에서 새로 추가된 신호는 ManyToMan 관계(양 당사자)와 외래 키 관계(공개 QuerysetProxy와 동일)의 반대에 대해 방출됩니다.
- 신호는 다음 매개 변수를 수신합니다. 발신자: Type[Model] - 발신자 클래스, 인스턴스: Model - 관련 모델의 인스턴스 추가, 하위: Model - 모델 추가, _name: str - 하위 관계 추가 추가 신호와 같은 이름도 _kwargs를 통해 전달됩니다. 사전 - 추가하기 위해 전달된 kwargs 사전()
변화
- 이제 생성, 삭제 및 업데이트 중에 다대다 관계의 모델을 Instantiate하면 기본 키로 자동 증가 int뿐만 아니라 기본 기능이 있는 모든 열 유형을 제공할 수 있습니다.
- 이제 스루 모델이 Instantiated되었으므로 스루 모델 전후에 신호를 저장/업데이트/삭제할 수도 있습니다.
- _ 신호 수신기는 이제 업데이트 함수에 전달된 값의 사전(있는 경우)인 통과_args 매개 변수도 가져옵니다(그렇지 않으면 빈 사전).
수리
- 이제 값을 가져오기 전에 사전 _ 신호를 전송하여 전달된 인스턴스를 제자리에 수정할 수 있으며 수정된 필드 값이 데이터베이스에 반영됩니다.
- 이제 대량 _가 UUID 기본 키 열 유형을 올바르게 사용할 수도 있습니다.
0.9.8
특징
- 데이터베이스에서 선택한 필드를 암호화할 수 있는 가능성 추가
- 최소한 암호화_비밀을 제공하고 암호화_백엔드를 제공해야 합니다.
- pt_backend는 ormar 중 하나가 될 수 있습니다. EncryptBackend 열거(NONE, FERNET, HASH, CUSTOM) - 기본값: NONE
- 사용자 지정 백엔드를 선택할 때 하위 클래스 또는 mar.field를 제공하는 백엔드 클래스를 제공해야 합니다. EncryptBackend
- 기본 _key 열 및 관계형 시리즈(FK 및 M2M)를 암호화할 수 없습니다.
- HASH와 FERNET의 두 가지 백엔드를 제공합니다.
- HASH는 검색 시 암호가 해독되지 않는 단방향 해시(암호와 같은)입니다.
- FERNET은 양방향 암호화/암호 해독 백엔드입니다.
- FERNET 백엔드에서는 암호화된 값의 일부가 타임스탬프이기 때문에 필터링 가능성이 완전히 사라집니다.
- HASH 백엔드에서는 전체 값으로 필터링할 수 있지만 포함된 필터는 암호화된 값을 비교하기 때문에 작동하지 않습니다.
- pt_backend를 추가하면 데이터베이스 열 유형이 TEXT로 변경되며 마이그레이션 또는 수동 변경으로 db에 반영되어야 합니다.
수리
- (고급/내부)는 유형을 통해 중지된 작동 사용자 지정 sqlalchemy 유형 함수를 복원합니다. TypeDecorator 하위 클래스), 그래서 프로세스 \ _ 결과 \ _ 값
0.9.7
특징
-
isnull 연산자를 추가하여 메소드를 필터링하고 제외합니다.
1 2
앨범 __name __isnull = 참 # (sql: album.name은 null) 앨범 __name __isnull = 거짓 # (sql: album.name null이 아닙니다)) -
는 ormar.or_및 ormar.and_함수를 추가하여 복잡한 쿼리를 중첩 조건과 결합하는 데 사용할 수 있습니다. 예제 쿼리:
1 2 3 4 5 6 7 8 9 10
책 = ( 북.ts._("저자")를 기다립니다. . 필터 ( Ormar. 그리고 _ ( Ormar. 또는 _ (year__gt = 1960, year__lt = 1940), 저자__name="J.R.R. 톨킨", ) ) . 모두 () )쿼리에서 업데이트된 문서 확인 -> 필터 및 정렬 -> 복잡한 필터
기타
- ForeignKey 또는 ManyToLong에서 기본값을 설정하면 모델 정의 예외가 발생합니다. 이는 지원되지 않기 때문입니다.
0.9.6
중요
다대다 관계 모델을 통한* 는 이제 선택 사항이 되고 있습니다. 제공하면 모든 것이 이전과 같이 작동하기 때문에 큰 변화는 아닙니다. 따라서 모델의 다른 필드를 원하지 않거나 "통과"할 필요가 없는 경우 건너뛸 수 있습니다. 자동으로 생성되며 alembic 마이그레이션 예제에 포함되어야 합니다. 기존 데이터베이스를 삭제하려면 기본 명명 규칙을 확인하여 기존 데이터베이스 구조를 조정하십시오.
1 | |
특징
- 는 QuerysetProxy에 업데이트 방법을 추가하므로 이제 관련 모델을 ManyToMan 관계의 상위 모델과 역외 키 관계에서 직접 업데이트할 수 있습니다. QuerySet와 같은 업데이트는 업데이트된 모델 수를 반환하고 상위 모델에서 관련 모델을 업데이트하지 않습니다.
상위 모델에 대한 새로 고침 데이터를 가져오려면 관련 모델(예:
await model_instance.related.all())을 새로 고쳐야 합니다. - 추가
load_all(follow=False, exclude=None)모델의 현재 인스턴스와 모든 관련 모델을 한 번의 호출로 로드할 수 있는 모델 방법입니다. 기본적으로 직접 관련된 모델만 로드되지만 팔로우 = True를 설정하면 트리가 통과됩니다(루프 방지). QuerySet._field() 메서드와 동일한 제외 매개 변수를 전달할 수도 있습니다. - 다대다 관계의 스루 모델에 더 많은 필드를 추가할 수 있는 가능성을 추가했습니다.
- 스루 모델 필드의 이름은 스루 클래스의 소문자 이름입니다.
- 관계에서 추가(자녀, **kwargs)를 호출할 때 (QuerysetProxy에서) 추가 필드를 전달할 수 있습니다.
- 키워드 인수 중 하나가 값 사전이 있는 모델 이름이어야 하는 경우 관계(QuerysetProxy)에서 생성()을 호출할 수 있습니다.**Kwargs) 다른 필드를 통과할 때
- 모델 필드를 통해 주문할 수 있습니다.
- 모델 필드별로 필터링할 수 있습니다.
- 모델별 필드를 포함하거나 제외할 수 있습니다.
- 모델을 통해 관련 모델에만 추가하십시오(즉, A에서 B로 조회하는 경우 -> B에서만 조회하는 경우).
- 패스스루 모델은 관계 없이 명시적으로 로드된다는 점에 유의하십시오. -> 관계는 ManyTo많이 필드에 채워져 있습니다.
- 모델을 통해 관계형 필드를 선언할 수 없었던 이전과 마찬가지로 ormar에 의해 채워지지만 이제 그렇게 하려고 하면 던질 것입니다ModelDefinitionError
- 자세한 내용을 보려면 업데이트된 ManyTo많이 관계 문서를 확인하십시오.
기타
- 업데이트된 문서 및 API 문서
- 리팩토링 및 최적화에는 주로 필터, 제외 및 정렬 기준이 포함됩니다.
0.9.5
수리
- pydantic을 버전으로 업데이트한 후 pydantic FieldInfo 생성 문제를 해결합니다 > = 1.8
- 향후 이러한 상황을 방지하기 위해 필요한 종속성 버전 수정
0.9.4
수리
- 여러 모델이 동일한 관련 모델을 참조할 때 자동 문서화를 위한 고정 패스트파피 OpenAPI 스키마 생성
0.9.3
수리
- 초기화 후 값을 설정할 때 JSON 필드가 이중으로 이스케이프되는 문제를 해결했습니다.
- 파이썬 내부 구조로 인해 JSON 필드가 빈 필드 설정을 준수하지 않는 문제를 해결합니다.
- JSON 필드에 대한 선택 확인 수정
- 초기화 후 속성을 설정할 때 검증되지 않은 옵션 수정
- 쿼리 설정 업데이트 호출 중에 검증되지 않은 수정 옵션
0.9.2
기타
- 설명서/readme 파일의 빠른 시작 업데이트
- 하위 페이지를 쿼리할 수 있는 링크가 있는 업데이트된 문서
- 코드 기후 및 다운로드에 대한 배지 추가
0.9.1
특징
- OpenAPI 사양에 옵션 값을 추가하여 결과 스키마의 기본 Enum 필드처럼 보이게 합니다.
수리
- 특수 필드가 초기화되지 않았지만 문자열 등으로 전달된 경우 Fastapi를 사용하여 선택 동작을 수정합니다.
0.9.0
중요한
- 브레이크 수정: 릴리스 0.8.0는 데이터베이스에서 외부 _key 제약 조건이 생성되는 것을 방지하는 버그를 도입했습니다.
- 따라서 버전 > = 0.8.0을 사용하는 경우 대부분의 ormar 기능이 실행 중이지만 ormar(또는 ormar + alembic)로 생성된 데이터베이스는 관련이 없으며 성능 및 데이터 무결성 관점에서 어려움을 겪을 수 있으므로 업데이트하는 것이 좋습니다.
- ormar를 사용하여 기존 데이터베이스에 연결하는 경우 성능과 무결성은 양호해야 하지만 이후의 모든 스키마 업데이트를 모델에 반영하도록 업데이트해야 합니다.
휴식
- 돌파구: 이제 모든 외래 키와 고유한 제약 조건에 이름이 있으므로 alembic은 데이터베이스에 의존하지 않고 데이터베이스에서 해당 키를 인식할 수 있습니다.
- 손상: 모델 구성 중에 모델의 메타 클래스에 메타데이터 또는 데이터베이스가 포함되어 있지 않으면 이제 일반 속성 오류 대신 ModelDefinitionError가 발생합니다.
- 깨짐: 쿼리를 실행하는 데 사용되는 코드/데이터베이스에는 SQLite 백엔드에 대한 연결 풀이 없으므로 각 쿼리가 새 연결로 실행되고 각 연결에서 기본적으로 꺼져 있기 때문에 강제 외래 키 제약 조건을 활성화할 수 없습니다. 이것은 기본적으로 모든 sqlite3 쿼리가 "PRAGMA 외래 _key = 1;" 실행 중인 이후 ormar에서 변경되어 이제 모든 sqlite3 연결이 계단식을 포함하여 기본적으로 외래 키 제약 조건을 적용합니다.
기타
- API 문서를 업데이트합니다.
- 데이터베이스에 fk를 만들고 데이터베이스에 계단식 연결을 만드는 테스트를 추가합니다.
0.8.1
특징
- 는 관계에서 ForwardRef의 처리를 설명합니다. 이제 외부 키와 다대다 관계 등 자체 참조 모델을 만들 수 있습니다. ForwardRef는 모델과 함께 사용할 수 있습니다.
-
다음과 같은 복잡한 관계를 처리하기 위해 단일 쿼리에서 두 개의 동일한 관계 조인을 수행할 수 있는 가능성을 소개합니다.
1 2 3 4 5 6 7
B = X = Y // A \ 하나의 쿼리에 한 번만 X에서 Y로 연결하기 전에 C = X = Y = 두 가지 다른 관계가 사용되지 않는 한 (이름이 다른 두 개의 관계 필드) -
페이지 및 페이지 _ 크기별로 제한/오프셋을 허용하는 페이징 방법을 소개합니다. 쿼리 세트 및 쿼리 세트 프록시에 사용할 수 있습니다.
기타
- 쿼리 및 조인에서 리팩토링 및 성능 최적화.
- 테스트 및 Pypi 설정에 Python 3.9를 추가합니다.
- 쿼리 문서의 분할인 API 설명서 및 설명서 ->를 업데이트합니다.
0.8.0
휴식
- Breaking에서 자녀의 부모: 제거() 반전 외래 키 관계는 이제 동일한 모델을 여러 번 등록할 수 있기 때문에 관계 이름을 전달해야 하며 ormar는 자녀를 제거할 부모의 관계를 알아야 합니다.
- 중단: 기본적으로 조인 전 기본 테이블에만 _lated 적용 한계 및 오프셋을 선택합니다. 즉, 총 행 수가 제한되지 않고 마스터 모델 수(쿼리의 첫 번째, 구성에 사용)만 사용됩니다. 여전히 한계 또는 오프셋(또는 둘 다)의 참 플래그를 사용하여 데이터베이스 응답의 모든 행을 제한할 수 있습니다.
- 손상: 먼저 방출()하면 첫 번째 행이 기본 키 asc별로 정렬됩니다(따라서 첫 번째 행이 삽입됩니다(숫자가 아닌 기본 키의 경우 다를 수 있음 - 즉, 문자열의 알파벳 순서).
- 손상: 필터 없이 get()을 방출하면 이제 기본 키 데스크별로 정렬된 첫 번째 행이 가져옵니다(따라서 마지막으로 삽입된 행이어야 합니다(숫자가 아닌 기본 키의 경우 다를 수 있음 - 즉, 문자열의 알파벳 순서).
- 파괴(내부): Meta.에 남아 있는 sqlalchemy 열은 더 이상 테이블에 바인딩되지 않으므로 거기에서 열을 직접 검색할 수 없습니다.
특징
- 상속을 소개합니다. 현재 가능한 상속에는 두 가지 유형이 있습니다.
- Mixins - 하위 클래스 ormar를 사용하지 마십시오. 모델, 나중에 다른 모델에서 사용되는 필드를 정의하기만 하면 됩니다(예: 각 하위 모델에서 생성된 \ _ 날짜 및 업데이트된 \ _ 날짜). 실제 모델만 테이블을 만들고 해당 필드를 혼합에 추가합니다.
- 콘크리트 테이블 상속 - 상위가 추상 = 메타 클래스에서 참으로 표시되고 각 하위에는 상위 및 자체 하위 열의 열이 있는 자체 테이블이 있으며 혼합과 다소 유사하지만 상위도 (추상) 모델입니다.
- 자세한 내용은 모델 -> 상속 섹션에서 설명서를 참조하십시오.
- 먼저 쿼리 세트()를 프리페치 _lated와 함께 사용할 수 있습니다.
수리
- 메인 모델 순서의 _by 순서로 마이너 버그 수정
- 동일한 모델에 대해 여러 관련 _ 이름 프리페치_ 쿼리를 수정합니다.
- 는 서로 다른 모델에서 동일한 관련 _ 이름을 사용하여 수정하여 동일한 관련 모델이 서로 덮어쓰도록 하여 이제 ModelDefinitionError 높이고 이름을 변경해야 합니다.
- 동일한 테이블에 여러 조인을 적용할 때 순서_by가 조건을 재정의하는 문제를 해결했습니다.
문서
- 문서 분할 및 정리:
- 모델을 더 작은 부분으로 나눕니다.
- 관계 섹션을 하위 섹션으로 나눕니다.
- 필드 부분을 작은 부분으로 나눕니다.
- 모델 상속 섹션 추가
- API(베타) 문서 추가
0.7.5
- 많은 _to_많은 연결에서 잘못된 관계 시리즈 이름 수정(수정 #73)
0.7.4
- 동일한 관련 모델/테이블에 대한 여러 관계를 허용합니다.
- 많은 _to_많은 연결에 사용된 오류 수준 시리즈 수정(수정 #73)
- 동일한 모델에도 FK 관계가 있는 경우 M2M 관계에 대해 잘못된 관계 모집단을 수정했습니다.
- 모델의 동일한 테이블에 여러 관계가 있는 경우 사용자가 관련 _ 이름을 제공하는지 확인하기 위해 검사를 추가합니다.
- 죽은 약한 프록시 모델을 더 열심히 정리합니다.
0.7.3
- UUDI pk 설정을 사용하여 관련 모델을 가져오는 문제를 해결했습니다. 여기서 UUDI pk는 원시 문자열입니다(수정 #71).
0.7.2
pk Model.update() with fields passed as parameters 만으로 관련 모델을 덮어쓰기 위한* 수정 (수정 #70)
0.7.1
- Model.save()에서만 pk를 사용하여 관련 모델 재정의 수정 (수정 #68)
0.7.0
- Break: QuerySetBulk_ 메서드는 이제 저장되지 않은 모델에 ModelPersistenceErrorQueryDefinitionError
- 돌파구: 알 수 없는 필드 이름을 가진 모델 초기화가 이제 키 오류 대신 모델 오류를 높입니다.
- 는 미리 정의된 목록 신호와 데코레이터가 있는 신호를 추가합니다. post \ _ 삭제, post \ _ 저장, post \ _ 업데이트, pre \ _ 삭제, pre \ _ 저장, pre \ _ 업데이트
- py.type을 추가하고 mypy를 지원하도록 setup.py 수정
- 성능 최적화
- 문서 업데이트
0.6.2
- 성능 최적화
- pydantic_ 전용 필드가 필요한 버그 수정
- 는 속성 _field 데코레이터를 추가하고 기능을 속성으로 등록합니다. 이 기능은 Model.Model _dump() 및 fast api 응답에 포함됩니다.
- 문서 업데이트
0.6.1
- pydantic 설정 기본값을 피하기 위해 nullable 필드를 제외하도록 명시적으로 설정 없음(수정 #60).
0.6.0
- Breaking: 데이터베이스에서 인스턴스 행을 삭제할 때 instance.로드()를 호출하면 이제 ValueWrack 대신 NoMatch가 증가합니다.
- 중단: ReverseForeignKey 관계에서 추가 및 제거 호출 이제 데이터베이스 설정을 업데이트하고 fk 열에서 하위 모델을 제거합니다.
- 의 돌파구: ReverseForeignKey 관계는 이제 ManyToMan 관계와 같은 QuerySetProxy API를 노출합니다.
- 깨짐: ManyToMan에서 관련 모델을 쿼리하면 상위 모델에 로드된 관련 모델 목록이 지워집니다.
- 예: post.ories.first()는 post.를 관련 모델 1개 목록으로 설정합니다 -> 먼저 반환된 모델()
- 예 2: 게시물에 4개의 범주가 있는 경우 len(포스트.카테고리) == 4개의 호출
post.categories.limit(2).all()-> 이제 2개의 하위 프로세스만 로드됩니다.assert len(post.categories) == 2
- 가 get_or_create, _or_create, 필드, 제외_field, 제외, 프리페치_lated 및 순서_by를 QuerySetProxy로 추가했으므로 이제 관계에서 직접 이러한 방법을 사용할 수 있습니다.
- 문서 업데이트
0.5.5
- UUID 열을 마이그레이션하기 위한 수정된 alembic 자동 생성 문제. sqlalchemy CHAR(32) 또는 CHAR(36)만 생성해야 합니다.
- 이 기능이 작동하려면 사용자 __접두사='sa'를 설정해야 합니다. (sqlalchemy__접두사 옵션과 같아야 합니다. 기본값은 "sa"입니다.)
0.5.4
-
를 사용하면 uuid_ 형식("16진수"(기본값) 또는 "문자열")을 UUID 필드에 전달하여 저장 형식을 변경할 수 있습니다. 기본적으로 필드는 16진수 형식(대시 없이 32자로 잘라짐)으로 저장되지만 형식 = '문자열'을 전달하여 36(대시 포함)을 사용하여 기존 데이터베이스 또는 기타 라이브러리를 조정할 수 있습니다.
샘플:
- 16진수 값 =c616ab438cce49dbbf4380d109251dce
- 문자열 값 =c616ab43-8cce-49db-bf43-80d109251dce
0.5.3
- 제외 매개 변수를 무시하고 사전 매개 변수를 포함하지 않는 Model.Model_dump() 메서드에서 버그를 수정했습니다.
0.5.2
- 별도의 쿼리에서 후속 모델을 로드하는 prefetch_lated 메서드를 추가했습니다.
- 문서 업데이트
0.5.1
- 트래비스 대신 github 동작으로 전환
- 문서의 배지 업데이트
0.5.0
- 저장 상태 추가 -> ModelInstant. 속성을 사용하여 모델이 저장되었는지 확인할 수 있습니다.
- 모델에 삽입 방법을 저장/업데이트/로드/업데이트한 후 모델 저장
create/get/first/all/get_or_create/update_or_create방법 이후에 저장된* 모델 - 모델은 대량_업데이트 및 대량_생성에 전달되면 저장됩니다.
- ManyToAll 관련 개체를 추가/제거한 후 모델 저장(모델 인스턴스를 통해 자동으로 저장/삭제)
- 모델은 자체 필드를 변경한 후 저장되지 않습니다(Model.pk 별칭으로 pk 포함).
- ForeignKey 관련 개체를 추가/제거한 후 모델이 저장되지 않음(fk 열이 저장되지 않음)
- 는 __init__를 사용하여 Instantiation 후 모델을 저장하지 않습니다(QuerySet.create를 사용하지 않거나 저장을 호출하기 전에).
- 모델에 삽입 방법을 저장/업데이트/로드/업데이트한 후 모델 저장
- 는 Model.up(**kwargs), pk가 설정되지 않은 경우 저장(), 그렇지 않은 경우 업데이트(**kwargs)를 추가합니다.
- Extra
Model.save_related(follow=False)는 모든 관계에서 모든 관련 개체에 대해 반복하고 저장되었는지 확인합니다. 그렇지 않은 경우 각 개체에서 up()를 호출합니다. - 중단: 저장되지 않은(pk는 없음) 모델을 다대다 관계에 추가/제거하면 예외를 추가합니다.
- _field를 제외한 필드에 사전 및 컬렉션을 전달할 수 있습니다.
- _field를 제외한 필드의 사전으로 str 및 목록을 자동으로 변환합니다.
- 중단: 중첩 모델을 대상 모델 이름 대신 연결된 외래 키 이름으로 필드 및 Excre _ 필드에 전달
- 성능 최적화 - model, newbasemodel - 쿼리 감소 >에서 일부 속성이 모델에 캐시됩니다.
- 사용하지 않는 관계 코드 정리
- 선택적 성능 종속성 또는 json 추가(강력 권장)
- 문서 업데이트
0.4.4
- _field() 메서드를 제외하고 추가하여 필드를 SQL에서 제외합니다.
- 리팩터 열 이름 설정(별칭)
- 별칭이 있는 열을 정렬하는 방법 수정
- _field를 제외한 필드에 대한 추가 테스트
- 문서 업데이트
0.4.3
- models.Model_dump() 및 model.Model_dump_json()에 속성을 포함합니다.
0.4.2
- pk로만 채워진 관련 모델의 반환을 허용하도록 pydantic 모델 생성 수정
0.4.1
- 정렬을 허용하도록 쿼리 세트에 순서 _by 메서드를 추가합니다.
- 문서 업데이트
0.4.0
- 는 모델 정의에서 표기법을 변경했습니다. -> 이제 이름 = ormar를 사용합니다. 이름 대신 필드() : ormar. 필드()
- 이전 표기법은 여전히 지원되지만 더 이상 사용되지 않으며 mypy 및 pydantic py 플러그인과 같은 정적 체커에서 잘 작동하지 않습니다.
- 프롬프트 문서를 입력하고 테스트합니다.
- mypy도 테스트에 사용할 수 없으며 ormar 패키지만 사용할 수 있습니다.
- 최대 _ 숫자 및 소수 _ 장소 pydantic Dec 필드를 사용하여 척도 및 정밀도 변환 수정
- 문서 업데이트 - 종속성 추가를 위한 모범 사례
- 유형 힌트를 더 잘 사용하기 위해 메타 클래스 및 모델 _ 필드를 리팩터합니다.
- 설명서에 mypy 및 pydantic 플러그인 추가
- 다대다 관계에 대한 문서 확장
0.3.11
- 파이썬의 기본 필드 값으로 설정 서버_기본값 수정
0.3.10
- 다른 백엔드를 사용할 때 드라이버가 설치되지 않은 예외를 방지하기 위해 포스트 그레슬링 확인
0.3.9
-
19에서 JSON 스키마 생성 수정
- Ormar의 Fastapi 사본에서 초기화되지 않은 ManyToMan 관계에 대한 문제를 해결했습니다. 모델
- FastAPI 사용에 대한 문서 업데이트
- 테스트 추가
0.3.8
- 모든 필드에 대한 이름 매개 변수와 함께 대체 데이터베이스 열 이름을 제공할 수 있는 가능성을 추가했습니다.
- 필드()를 사용하여 비어있는 경우 관련 ManyTo많은 필드를 선택하는 버그를 수정했습니다.
- 문서 업데이트
0.3.7
- 문서 게시 및 읽기 파일 업데이트
0.3.6
- 필드() 메서드를 추가하여 데이터베이스에서 선택한 열을 제한합니다. null 가능 열만 제외할 수 있습니다.
- 고유 열 및 제약 조건 목록이 모델 요소에 추가되어 열 목록에 고유 제약 조건을 작성합니다.
- Char(32) 열 유형을 기준으로 UUID 필드 유형을 추가했습니다.
0.3.5
- 여러 개체에 대한 작업을 위해 bulk_create 및 bulk_를 추가했습니다.
0.3.4
쿼리 추가 레벨 설정 방법
- 삭제
- 업데이트
- 획득 또는 생성
- 업데이트 또는 생성
0.3.3
- 추가 필터 추가 - 시작 및 끝
0.3.2
- 모든 필드에 옵션 매개 변수 추가 - 허용된 값을 제공된 값으로 제한
0.3.1
- 필터에 제외를 추가했습니다.
- MySQL 및 Postgres에 대한 테스트를 추가하고 Postgres를 수정했습니다.
- 래퍼와 청소.
0.3.0
- 많은 필드를 추가하고 다대다 관계를 지원합니다.