데이터베이스에 데이터 삽입
다음 방법을 사용하면 데이터베이스에 데이터를 삽입할 수 있습니다.
-
만들기(**Kwargs) -> 모델
-
get_or_create(_defaults: Optional[Dict[str, Any]] = None, **kwargs) -> Tuple[Model, bool]
-
update_or_create(**kwargs) -> Model
-
bulk_create(objects: List[Model]) -> None
-
Model*Model.save() 방법*Model.up() 방법*Model.save_lated() 방법
-
쿼리 세트 에이전트*QuerysetProxy.create(**kwargs) 방법*QuerysetProxy.get_or_create(_defaults: Optional[Dict[str, Any]] = None, **kwargs) 방법*QuerysetProxy.update_or_create(**kwargs) 방법
만들기
생성(**kwargs):-> 모델
모델 인스턴스를 만들고 데이터베이스에 저장한 다음 모델을 업데이트하기 위해 돌아갑니다(전달되지 않고 자동 증분이 설정된 경우 pk가 채워집니다).
허용된 kwargs는 모델 필드 이름과 올바른 값 유형입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | 클래스 앨범(ormar. 모델):
ormar_config = ormar. OrmarConfig (
데이터베이스 = 데이터베이스,
메타데이터 = 메타데이터,
테이블 이름 = "앨범"
)
ID: int = ormar. 정수(prial_key = 참)
이름: str = ormar. 문자열(max_long = 100)
말리부 = Album을 기다립니다.
트랙.ts.create를 기다립니다(앨범 = 말리부, 제목 = "새", 위치 = 1)
|
또 다른 접근 방식은 모델 분할 생성과 지속성입니다.
| 말리부 = 앨범 (이름 = "말리부")
기다려malibu.save()
|
획득 또는 생성
get_or_create(_defaults: Optional[Dict[str, Any]] = None, **kwargs) -> Tuple[Model, bool]
방법의 조합을 만들고 가져옵니다.
기준을 충족하는 행을 가져오려고 시도하고 NoMatch 예외가 발생하면 지정된 kwargs 및 _de로 새 행이 생성됩니다.
_de 사전을 제공할 때 명시적으로 제공된 값을 재정의하는 것을 포함하여 _de에서 설정된 값은 항상 설정됩니다. IE get_or_create(_defaults: {"title": "I win"}, title="never used") 는 kwargs에서 자신의 가치를 제공하든 그렇지 않든 항상 "I win"을 제목으로 사용합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | 클래스 앨범(ormar. 모델):
ormar_config = ormar. OrmarConfig (
데이터베이스 = 데이터베이스,
메타데이터 = 메타데이터,
테이블 이름 = "앨범"
)
ID: int = ormar. 정수(prial_key = 참)
이름: str = ormar. 문자열(max_long = 100)
연도: int = ormar. 정수()
앨범, 생성됨 = Album을 기다립니다.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 열을 자동 증분으로 설정해야 합니다.
업데이트 또는 생성
update_or_create(**kwargs) -> Model
모델을 업데이트하거나 데이터베이스에 일치하는 모델이 없는 경우 새 모델을 만듭니다.
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 | import asyncio
import databases
import ormar
import sqlalchemy
from examples import create_drop_database
DATABASE_URL = "sqlite:///test.db"
ormar_base_config = ormar.OrmarConfig(
database=databases.Database(DATABASE_URL),
metadata=sqlalchemy.MetaData(),
)
class Book(ormar.Model):
ormar_config = ormar_base_config.copy()
id: int = ormar.Integer(primary_key=True)
title: str = ormar.String(max_length=200)
author: str = ormar.String(max_length=100)
genre: str = ormar.String(
max_length=100,
default="Fiction",
)
@create_drop_database(base_config=ormar_base_config)
async def run_query():
await Book.objects.create(
title="Tom Sawyer", author="Twain, Mark", genre="Adventure"
)
await Book.objects.create(
title="War and Peace", author="Tolstoy, Leo", genre="Fiction"
)
await Book.objects.create(
title="Anna Karenina", author="Tolstoy, Leo", genre="Fiction"
)
# if not exist the instance will be persisted in db
vol2 = await Book.objects.update_or_create(
title="Volume II", author="Anonymous", genre="Fiction"
)
assert await Book.objects.count() == 4
# if pk or pkname passed in kwargs (like id here) the object will be updated
assert await Book.objects.update_or_create(id=vol2.id, genre="Historic")
assert await Book.objects.count() == 4
asyncio.run(run_query())
|
새 개체를 만들려면 pk 열 값을 전달하거나 pk 열을 자동 증분으로 설정해야 합니다.
배치 생성
bulk_create(objects: List["Model"]) -> None
여러 개체를 동시에 만들 수 있습니다.
유효한 모델 개체 목록을 전달해야 합니다.
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
37
38
39 | import asyncio
import databases
import ormar
import sqlalchemy
from examples import create_drop_database
DATABASE_URL = "sqlite:///test.db"
ormar_base_config = ormar.OrmarConfig(
database=databases.Database(DATABASE_URL),
metadata=sqlalchemy.MetaData(),
)
class ToDo(ormar.Model):
ormar_config = ormar_base_config.copy(tablename="todos")
id: int = ormar.Integer(primary_key=True)
text: str = ormar.String(max_length=500)
completed = ormar.Boolean(default=False)
@create_drop_database(base_config=ormar_base_config)
async def run_query():
# create multiple instances at once with bulk_create
await ToDo.objects.bulk_create(
[
ToDo(text="Buy the groceries."),
ToDo(text="Call Mum.", completed=True),
ToDo(text="Send invoices.", completed=True),
]
)
todoes = await ToDo.objects.all()
assert len(todoes) == 3
asyncio.run(run_query())
|
모델 방법
각 모델 인스턴스에는 저장, 업데이트 또는 로드하는 일련의 방법이 있습니다.
저장
QuerySet.create() 메서드를 사용하거나 모델을 일반 Pydantic 모델로 초기화한 다음 Save() 메서드를 호출하여 새 모델을 만들 수 있습니다.
!!!팁 모델의 저장() 방법에 대해 자세히 알아보기 - 저장
업데이트 삽입
모델의 저장() 또는 업데이트(**kwargs) 메서드의 프록시. pk가 설정되지 않은 경우 저장() 메서드가 호출됩니다.
!!!팁 모델-업퍼트의 업퍼트() 방법에 대해 자세히 알아보십시오.
관련 저장
메소드는 메소드를 호출하고 저장되지 않은 각 모델에서 up() 메서드를 호출하는 모델의 모든 관계를 반복합니다.
!!!팁 모델 저장 지연의 저장 _lated() 방법에 대해 자세히 알아보십시오.
QuerysetProxy 방법
관련 ManyTo많이 필드 및 ReverseForeignKey에 직접 액세스하면 관련 모델 목록이 반환됩니다.
그러나 쿼리 세트 API의 하위 집합도 표시되므로 상위 모델에서 직접 필터링, 생성, 관련 모델 선택 등을 할 수 있습니다.
만들기
생성 함수는 위의 함수와 동일하지만 관계의 다른 쪽 끝에서 관련 개체를 만들 수 있습니다.
!!!QuerysetProxy에 대해 자세히 알아보려면 QuerysetProxy 섹션을 방문하십시오.
획득 또는 생성
위의 get_ 또는 _ create 함수와 정확히 동일하지만 관계의 다른 쪽 끝에서 관련 개체를 쿼리하거나 만들 수 있습니다.
!!!QuerysetProxy에 대해 자세히 알아보려면 QuerysetProxy 섹션을 방문하십시오.
업데이트 또는 생성
업데이트 _ 또는 _ 생성 함수는 위와 정확히 동일하지만 관계의 다른 쪽 끝에서 관련 개체를 업데이트하거나 만들 수 있습니다.
!!!QuerysetProxy에 대해 자세히 알아보려면 QuerysetProxy 섹션을 방문하십시오.