From: Geumbin <107880480+GeumBinLee@users.noreply.github.com>
Date: Tue, 24 Dec 2024 16:14:29 +0000 (+0900)
Subject: 🌐 Add Korean translation for `docs/ko/docs/tutorial/sql-databases.md` (#13093)
X-Git-Tag: 0.115.7~129
X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eece6344f5d7e24d19de217ab74804577fdce8eb;p=thirdparty%2Ffastapi%2Ffastapi.git
🌐 Add Korean translation for `docs/ko/docs/tutorial/sql-databases.md` (#13093)
---
diff --git a/docs/ko/docs/tutorial/sql-databases.md b/docs/ko/docs/tutorial/sql-databases.md
new file mode 100644
index 0000000000..58c7017d6a
--- /dev/null
+++ b/docs/ko/docs/tutorial/sql-databases.md
@@ -0,0 +1,360 @@
+# SQL (ê´ê³í) ë°ì´í°ë² ì´ì¤
+
+**FastAPI**ìì SQL(ê´ê³í) ë°ì´í°ë² ì´ì¤ ì¬ì©ì íìê° ìëëë¤. ì¬ë¬ë¶ì´ ìíë **ì´ë¤ ë°ì´í°ë² ì´ì¤ë ** ì¬ì©í ì ììµëë¤.
+
+ì¬ê¸°ìë SQLModelì ì¬ì©íë ìì 를 ì´í´ë³´ê² ìµëë¤.
+
+**SQLModel**ì SQLAlchemyì Pydanticì 기ë°ì¼ë¡ 구ì¶ëììµëë¤.SQLModelì **SQL ë°ì´í°ë² ì´ì¤**를 ì¬ì©íë FastAPI ì í리ì¼ì´ì
ì ìë²½í ì´ì¸ë¦¬ëë¡ **FastAPI**ì ì ììê° ì¤ê³í ë구ì
ëë¤.
+
+/// tip | í
+
+ë¤ë¥¸ SQL ëë NoSQL ë°ì´í°ë² ì´ì¤ ë¼ì´ë¸ë¬ë¦¬ë¥¼ ì¬ì©í ìë ììµëë¤ (ì¼ë¶ë "ORM"ì´ë¼ê³ ë ë¶ë¦½ëë¤), FastAPIë í¹ì ë¼ì´ë¸ë¬ë¦¬ì ì¬ì©ì ê°ìíì§ ììµëë¤. ð
+
+///
+
+SQLModelì SQLAlchemy를 기ë°ì¼ë¡ íë¯ë¡, SQLAlchemyìì **ì§ìíë 모ë ë°ì´í°ë² ì´ì¤**를 ìì½ê² ì¬ì©í ì ììµëë¤(SQLModelììë ëì¼íê² ì§ìë©ëë¤). ì를 ë¤ë©´:
+
+* PostgreSQL
+* MySQL
+* SQLite
+* Oracle
+* Microsoft SQL Server ë±.
+
+ì´ ìì ììë **SQLite**를 ì¬ì©í©ëë¤. SQLiteë ë¨ì¼ íì¼ì ì¬ì©íê³ íì´ì¬ìì 기본ì ì¼ë¡ ì§ìí기 ë문ì
ëë¤. ë°ë¼ì ì´ ìì 를 ê·¸ëë¡ ë³µì¬íì¬ ì¤íí ì ììµëë¤.
+
+ëì¤ì ì¤ì íë¡ëì
ì í리ì¼ì´ì
ììë **PostgreSQL**ê³¼ ê°ì ë°ì´í°ë² ì´ì¤ ìë²ë¥¼ ì¬ì©íë ê²ì´ ì¢ìµëë¤.
+
+/// tip | í
+
+**FastAPI**ì **PostgreSQL**를 í¬í¨íì¬ íë¡ í¸ìëì ë¤ìí ë구를 ì ê³µíë ê³µì íë¡ì í¸ ìì±ê¸°ê° ììµëë¤: https://github.com/fastapi/full-stack-fastapi-template
+
+///
+
+ì´ íí 리ì¼ì ë§¤ì° ê°ë¨íê³ ì§§ìµëë¤. ë°ì´í°ë² ì´ì¤ 기본 ê°ë
, SQL, ëë ë ë³µì¡í 기ë¥ì ëí´ ë°°ì°ê³ ì¶ë¤ë©´, SQLModel 문ì를 ì°¸ê³ íì¸ì.
+
+## `SQLModel` ì¤ì¹í기
+
+먼ì , [ê°ì íê²½](../virtual-environments.md){.internal-link target=_blank}ì ìì±íê³ íì±íí ë¤ì, `sqlmodel`ì ì¤ì¹íì¸ì:
+
+
+
+```console
+$ pip install sqlmodel
+---> 100%
+```
+
+
+
+## ë¨ì¼ 모ë¸ë¡ ì í리ì¼ì´ì
ìì±í기
+
+ì°ì ë¨ì¼ **SQLModel** 모ë¸ì ì¬ì©íì¬ ì í리ì¼ì´ì
ì ê°ì¥ ê°ë¨í 첫 ë²ì§¸ ë²ì ì ìì±í´ë³´ê² ìµëë¤.
+
+ì´í **ë¤ì¤ 모ë¸**ì ì¶ê°íì¬ ë³´ìê³¼ ì ì°ì±ì ê°íí ê²ì
ëë¤. ð¤
+
+### ëª¨ë¸ ìì±í기
+
+`SQLModel`ì ê°ì ¸ì¤ê³ ë°ì´í°ë² ì´ì¤ 모ë¸ì ìì±í©ëë¤:
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[1:11] hl[7:11] *}
+
+`Hero` í´ëì¤ë Pydantic 모ë¸ê³¼ ë§¤ì° ì ì¬í©ëë¤ (ì¤ì ë¡ ë´ë¶ì ì¼ë¡ *Pydantic 모ë¸ì´ê¸°ë í©ëë¤*).
+
+ëª ê°ì§ ì°¨ì´ì ì´ ììµëë¤:
+
+* `table=True`ë SQLModelì ì´ ëª¨ë¸ì´ *í
ì´ë¸ 모ë¸*ì´ë©°, ë¨ìí ë°ì´í° 모ë¸ì´ ìëë¼ SQL ë°ì´í°ë² ì´ì¤ì **í
ì´ë¸**ì ëíë¸ë¤ë ê²ì ìë ¤ì¤ëë¤. (ë¤ë¥¸ ì¼ë°ì ì¸ Pydantic í´ëì¤ì²ë¼) ë¨ìí *ë°ì´í° 모ë¸*ì´ ìëëë¤.
+
+* `Field(primary_key=True)`ë SQLModelì `id`ê° SQL ë°ì´í°ë² ì´ì¤ì **기본 í¤**ìì ìë ¤ì¤ëë¤ (SQL 기본 í¤ì ëí ìì¸í ë´ì©ì SQLModel 문ì를 ì°¸ê³ íì¸ì).
+
+ `int | None` ì íì¼ë¡ ì¤ì íë©´, SQLModelì í´ë¹ ì´ì´ SQL ë°ì´í°ë² ì´ì¤ìì `INTEGER` ì íì´ë©° `NULLABLE` ê°ì´ì´ì¼ íë¤ë ê²ì ì ì ììµëë¤.
+
+* `Field(index=True)`ë SQLModelì í´ë¹ ì´ì ëí´ **SQL ì¸ë±ì¤**를 ìì±íëë¡ ì§ìí©ëë¤. ì´ë¥¼ íµí´ ë°ì´í°ë² ì´ì¤ìì ì´ ì´ì¼ë¡ íí°ë§ë ë°ì´í°ë¥¼ ì½ì ë ë ë¹ ë¥´ê² ì¡°íí ì ììµëë¤.
+
+ SQLModelì `str`ì¼ë¡ ì ì¸ë íëª©ì´ SQL ë°ì´í°ë² ì´ì¤ìì `TEXT` (ëë ë°ì´í°ë² ì´ì¤ì ë°ë¼ `VARCHAR`) ì íì ì´ë¡ ì ì¥ëë¤ë ê²ì ì¸ìí©ëë¤.
+
+### ìì§ ìì±í기
+
+SQLModelì `engine` (ë´ë¶ì ì¼ë¡ë SQLAlchemy `engine`)ì ë°ì´í°ë² ì´ì¤ì ëí **ì°ê²°ì ì ì§**íë ìí ì í©ëë¤.
+
+**íëì ë¨ì¼ engine ê°ì²´**를 íµí´ ì½ë ì ì²´ìì ëì¼í ë°ì´í°ë² ì´ì¤ì ì°ê²°í ì ììµëë¤.
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[14:18] hl[14:15,17:18] *}
+
+`check_same_thread=False`를 ì¬ì©íë©´ FastAPIìì ì¬ë¬ ì¤ë ëìì ëì¼í SQLite ë°ì´í°ë² ì´ì¤ë¥¼ ì¬ì©í ì ììµëë¤. ì´ë **íëì ë¨ì¼ ìì²**ì´ **ì¬ë¬ ì¤ë ë**를 ì¬ì©í ì ì기 ë문ì íìí©ëë¤(ì: ìì¡´ì±ìì ì¬ì©ëë ê²½ì°).
+
+ê±±ì íì§ ë§ì¸ì. ì½ëê° êµ¬ì¡°íë ë°©ìì¼ë¡ ì¸í´, ì´íì **ê° ìì²ë§ë¤ ë¨ì¼ SQLModel *ì¸ì
*ì ì¬ì©**íëë¡ ë³´ì¥í ê²ì
ëë¤. ì¤ì ë¡ ê·¸ê²ì´ `check_same_thread`ê° íë ¤ë ê²ì
ëë¤.
+
+### í
ì´ë¸ ìì±í기
+
+ê·¸ ë¤ì `SQLModel.metadata.create_all(engine)`ì ì¬ì©íì¬ ëª¨ë *í
ì´ë¸ 모ë¸*ì **í
ì´ë¸ì ìì±**íë í¨ì를 ì¶ê°í©ëë¤.
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[21:22] hl[21:22] *}
+
+### ì¸ì
ìì¡´ì± ìì±í기
+
+**`Session`**ì **ë©ëª¨ë¦¬ì ê°ì²´**를 ì ì¥íê³ ë°ì´í°ì íìí 모ë ë³ê²½ ì¬íì ì¶ì í í, **`engine`ì íµí´** ë°ì´í°ë² ì´ì¤ì íµì í©ëë¤.
+
+`yield`를 ì¬ì©í´ FastAPIì **ìì¡´ì±**ì ìì±íì¬ ê° ìì²ë§ë¤ ìë¡ì´ `Session`ì ì ê³µí©ëë¤. ì´ë ìì²ë¹ íëì ì¸ì
ë§ ì¬ì©ëëë¡ ë³´ì¥í©ëë¤. ð¤
+
+ê·¸ë° ë¤ì ì´ ìì¡´ì±ì ì¬ì©íë ì½ë를 ê°ìíí기 ìí´ `Annotated` ìì¡´ì± `SessionDep`ì ìì±í©ëë¤.
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[25:30] hl[25:27,30] *}
+
+### ìì ì ë°ì´í°ë² ì´ì¤ í
ì´ë¸ ìì±í기
+
+ì í리ì¼ì´ì
ìì ì ë°ì´í°ë² ì´ì¤ í
ì´ë¸ì ìì±í©ëë¤.
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[32:37] hl[35:37] *}
+
+ì¬ê¸°ìë ì í리ì¼ì´ì
ìì ì´ë²¤í¸ ì í
ì´ë¸ì ìì±í©ëë¤.
+
+íë¡ëì
íê²½ììë ì í리ì¼ì´ì
ì ììí기 ì ì ì¤íëë ë§ì´ê·¸ë ì´ì
ì¤í¬ë¦½í¸ë¥¼ ì¬ì©í ê°ë¥ì±ì´ ëìµëë¤. ð¤
+
+/// tip | í
+
+SQLModelì Alembicì ê°ì¸ë ë§ì´ê·¸ë ì´ì
ì í¸ë¦¬í°ë¥¼ ì ê³µí ìì ì
ëë¤. íì§ë§ íì¬ Alembicì ì§ì ì¬ì©í ì ììµëë¤.
+
+///
+
+### Hero ìì±í기
+
+ê° SQLModel 모ë¸ì Pydantic 모ë¸ì´ê¸°ë íë¯ë¡, Pydantic 모ë¸ì ì¬ì©í ì ìë **íì
ì´ë
¸í
ì´**ì
ìì ëì¼íê² ì¬ì©í ì ììµëë¤.
+
+ì를 ë¤ì´, íë¼ë¯¸í°ë¥¼ `Hero` íì
ì¼ë¡ ì ì¸íë©´ **JSON 본문**ìì ê°ì ì½ì´ìµëë¤.
+
+ë§ì°¬ê°ì§ë¡, í¨ìì **ë°í íì
**ì¼ë¡ ì ì¸íë©´ í´ë¹ ë°ì´í°ì êµ¬ì¡°ê° ìëì¼ë¡ ìì±ëë API 문ìì UIì ëíë©ëë¤.
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[40:45] hl[40:45] *}
+
+
+
+ì¬ê¸°ì `SessionDep` ìì¡´ì± (ì¦, `Session`)ì ì¬ì©íì¬ ìë¡ì´ `Hero`를 `Session` ì¸ì¤í´ì¤ì ì¶ê°íê³ , ë°ì´í°ë² ì´ì¤ì ë³ê²½ ì¬íì 커ë°íê³ , `hero` ë°ì´í°ì ìµì ìí를 ê°±ì í ë¤ì ì´ë¥¼ ë°íí©ëë¤.
+
+### Heroes ì¡°íí기
+
+`select()`를 ì¬ì©íì¬ ë°ì´í°ë² ì´ì¤ìì `Hero`를 **ì¡°í**í ì ììµëë¤. ê²°ê³¼ì íì´ì§ë¤ì´ì
ì ì ì©í기 ìí´ `limit`ì `offset`ì í¬í¨í ì ììµëë¤.
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[48:55] hl[51:52,54] *}
+
+### ë¨ì¼ Hero ì¡°íí기
+
+ë¨ì¼ `Hero`를 **ì¡°í**í ìë ììµëë¤.
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[58:63] hl[60] *}
+
+### Hero ìì í기
+
+`Hero`를 **ìì **íë ê²ë ê°ë¥í©ëë¤.
+
+{* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[66:73] hl[71] *}
+
+### ì í리ì¼ì´ì
ì¤íí기
+
+ì í리ì¼ì´ì
ì ì¤ííë ¤ë©´ ë¤ì ëª
ë ¹ì ì¬ì©í©ëë¤:
+
+
+
+```console
+$ fastapi dev main.py
+
+INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+
+
+ê·¸ë° ë¤ì `/docs` UIë¡ ì´ëíë©´, **FastAPI**ê° í´ë¹ **modelë¤**ì ì¬ì©íì¬ API **문ì를 ìì±**íë ê²ì¼ë¥´ íì¸í ì ììµëë¤. ëí ì´ ëª¨ë¸ë¤ì ë°ì´í°ë¥¼ ì§ë ¬ííê³ ê²ì¦íë ë°ìë ì¬ì©ë©ëë¤.
+
+
+

+
+
+## ì¬ë¬ 모ë¸ë¡ ì í리ì¼ì´ì
ì
ë°ì´í¸
+
+ì´ì ì í리ì¼ì´ì
ì ì½ê° **리í©í ë§**íì¬ **ë³´ì**ê³¼ **ì ì°ì±**ì ê°ì í´ ë³´ê² ìµëë¤.
+
+ì´ì ì í리ì¼ì´ì
ì UI를 ë³´ë©´, ì§ê¸ê¹ì§ë í´ë¼ì´ì¸í¸ê° ìì±í `Hero`ì `id`를 ì§ì ì§ì í ì ìë¤ë ê²ì ì ì ììµëë¤. ð±
+
+ì´ë íì©ëì´ì ì ë©ëë¤. í´ë¼ì´ì¸í¸ê° ì´ë¯¸ ë°ì´í°ë² ì´ì¤ì ì ì¥ë `id`를 ë®ì´ì¸ ìíì´ ì기 ë문ì
ëë¤. `id`ë **ë°±ìë** ëë **ë°ì´í°ë² ì´ì¤**ê° ê²°ì í´ì¼ íë©°, **í´ë¼ì´ì¸í¸**ê° ê²°ì í´ìë ì ë©ëë¤.
+
+ëí heroì `secret_name`ì ìì±í긴 íì§ë§, ì§ê¸ê¹ì§ë ì´ ê°ì ì´ëììë ë°ííê³ ììµëë¤. ì´ë ê·¸ë¤ì§ **ë¹ë°ì¤ë½ì§** ììµëë¤... ð
+
+ì´ë¬í 문ì 를 í´ê²°í기 ìí´ ëª ê°ì§ **ì¶ê° 모ë¸**ì ì¶ê°í ê²ì
ëë¤. ë°ë¡ ì¬ê¸°ì SQLModelì´ ë¹ì ë°íê² ë©ëë¤. â¨
+
+### ì¬ë¬ ëª¨ë¸ ìì±í기
+
+**SQLModel**ìì `table=True`ê° ì¤ì ë ëª¨ë¸ í´ëì¤ë **í
ì´ë¸ 모ë¸**ì
ëë¤.
+
+`table=True`ê° ìë ëª¨ë¸ í´ëì¤ë **ë°ì´í° 모ë¸**ë¡, ì´ë ì¤ì ë¡ ëª ê°ì§ ì¶ê° 기ë¥ì´ í¬í¨ë Pydantic 모ë¸ì ë¶ê³¼í©ëë¤. ð¤
+
+SQLModelì ì¬ì©íë©´ **ìì**ì íµí´ 모ë ê²½ì°ì íë를 **ì¤ë³µ ì ì¸íì§ ììë** ë©ëë¤.
+
+#### `HeroBase` - 기본 í´ëì¤
+
+모ë 모ë¸ìì **ê³µì ëë íë**를 ê°ì§ `HeroBase` 모ë¸ì ììí´ ë´
ìë¤:
+
+* `name`
+* `age`
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[7:9] hl[7:9] *}
+
+#### `Hero` - *í
ì´ë¸ 모ë¸*
+
+ë¤ìì¼ë¡ ì¤ì *í
ì´ë¸ 모ë¸*ì¸ `Hero`를 ìì±í©ëë¤. ì´ ëª¨ë¸ì ë¤ë¥¸ 모ë¸ìë íì í¬í¨ëë ê±´ ìë **ì¶ê° íë**를 í¬í¨í©ëë¤:
+
+* `id`
+* `secret_name`
+
+`Hero`ë `HeroBase`를 ììíë¯ë¡ `HeroBase`ì ì ì¸ë íëë í¬í¨í©ëë¤. ë°ë¼ì `Hero`ë ë¤ì **íëë¤ë** ê°ì§ê² ë©ëë¤:
+
+* `id`
+* `name`
+* `age`
+* `secret_name`
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[7:14] hl[12:14] *}
+
+#### `HeroPublic` - ê³µê° *ë°ì´í° 모ë¸*
+
+ë¤ìì¼ë¡ `HeroPublic` 모ë¸ì ìì±í©ëë¤. ì´ ëª¨ë¸ì API í´ë¼ì´ì¸í¸ì **ë°í**ëë 모ë¸ì
ëë¤.
+
+`HeroPublic`ì `HeroBase`ì ëì¼í íë를 ê°ì§ë©°, `secret_name`ì í¬í¨íì§ ììµëë¤.
+
+ë§ì¹¨ë´ ì°ë¦¬ì heroesì ì ì²´ê° ë³´í¸ë©ëë¤! ð¥·
+
+ëí `id: int`를 ë¤ì ì ì¸í©ëë¤. ì´ë¥¼ íµí´, API í´ë¼ì´ì¸í¸ì **ê³ì½**ì ë§ºì´ `id`ê° íì ì¡´ì¬íë©° íì `int` íì
ì´ë¼ë ê²ì ë³´ì¥í©ëë¤(`None`ì´ ë ì ììµëë¤).
+
+/// tip | í
+
+ë°í 모ë¸ì´ ê°ì´ íì ì¡´ì¬íê³ íì `int`(`None`ì´ ìë)를 ë³´ì¥íë ê²ì API í´ë¼ì´ì¸í¸ìê² ë§¤ì° ì ì©í©ëë¤. ì´ë¥¼ íµí´ APIì íµì íë ê°ë°ìê° í¨ì¬ ë ê°ë¨í ì½ë를 ìì±í ì ììµëë¤.
+
+ëí **ìëì¼ë¡ ìì±ë í´ë¼ì´ì¸í¸**ë ë ë¨ìí ì¸í°íì´ì¤ë¥¼ ì ê³µíë¯ë¡, APIì ìíµíë ê°ë°ìë¤ì´ í¨ì¬ ììíê² ìì
í ì ììµëë¤. ð
+
+///
+
+`HeroPublic`ì 모ë íëë `HeroBase`ì ëì¼íë©°, `id`ë `int`ë¡ ì ì¸ë©ëë¤(`None`ì´ ìë):
+
+* `id`
+* `name`
+* `age`
+* `secret_name`
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[7:18] hl[17:18] *}
+
+#### `HeroCreate` - hero ìì±ì© *ë°ì´í° 모ë¸*
+
+ì´ì `HeroCreate` 모ë¸ì ìì±í©ëë¤. ì´ ëª¨ë¸ì í´ë¼ì´ì¸í¸ë¡ë¶í° ë°ì ë°ì´í°ë¥¼ **ê²ì¦**íë ìí ì í©ëë¤.
+
+`HeroCreate`ë `HeroBaseì` ëì¼í íë를 ê°ì§ë©°, ì¶ê°ë¡ `secret_nameì` í¬í¨í©ëë¤.
+
+í´ë¼ì´ì¸í¸ê° **ì heroì ìì±**í ë `secret_name`ì ë³´ë´ê³ , ì´ë ë°ì´í°ë² ì´ì¤ì ì ì¥ëì§ë§, í´ë¹ ë¹ë° ì´ë¦ì API를 íµí´ í´ë¼ì´ì¸í¸ìê² ë°íëì§ ììµëë¤.
+
+/// tip | í
+
+ì´ ë°©ìì **ë¹ë°ë²í¸**를 ì²ë¦¬íë ë°©ë²ê³¼ ëì¼í©ëë¤. ë¹ë°ë²í¸ë¥¼ ë°ì§ë§, ì´ë¥¼ APIìì ë°ííì§ë ììµëë¤.
+
+ë¹ë°ë²í¸ ê°ì ì ì¥í기 ì ì **í´ì±**íì¬ ì ì¥íê³ , **í문ì¼ë¡ ì ì¥íì§ ë§ììì¤**.
+
+///
+
+`HeroCreate`ì íëë ë¤ìê³¼ ê°ìµëë¤:
+
+* `name`
+* `age`
+* `secret_name`
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[7:22] hl[21:22] *}
+
+#### `HeroUpdate` - hero ìì ì© *ë°ì´í° 모ë¸*
+
+ì´ì ì í리ì¼ì´ì
ììë **hero를 ìì **í ë°©ë²ì´ ììì§ë§, ì´ì **ë¤ì¤ 모ë¸**ì íµí´ ìì 기ë¥ì ì¶ê°í ì ììµëë¤. ð
+
+`HeroUpdate` *ë°ì´í° 모ë¸*ì ì½ê° í¹ë³íë°, ì heroì ìì±í ë íìí **모ë ëì¼í íë**를 ê°ì§ì§ë§, 모ë íëê° **ì íì **(기본ê°ì´ ìì)ì
ëë¤. ì´ë ê² íë©´ heroì ìì í ë ìì íë ¤ë íëë§ ë³´ë¼ ì ììµëë¤.
+
+모ë **íëê° ë³ê²½ë기** ë문ì(íì
ì´ `None`ì í¬í¨íê³ , 기본ê°ì´ `None`ì¼ë¡ ì¤ì ë¨), 모ë íë를 **ë¤ì ì ì¸**í´ì¼ í©ëë¤.
+
+ìë°í ë§íë©´ `HeroBase`를 ììí íìë ììµëë¤. 모ë íë를 ë¤ì ì ì¸í기 ë문ì
ëë¤. ì¼ê´ì±ì ìí´ ììì ì ì§í긴 íì§ë§, íìë ìëëë¤. ì´ë ê°ì¸ì ì¸ ì·¨í¥ì 문ì ì
ëë¤. ð¤·
+
+`HeroUpdate`ì íëë ë¤ìê³¼ ê°ìµëë¤:
+
+* `name`
+* `age`
+* `secret_name`
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[7:28] hl[25:28] *}
+
+### `HeroCreate`ë¡ ìì±íê³ `HeroPublic` ë°íí기
+
+ì´ì **ë¤ì¤ 모ë¸**ì ì¬ì©íë¯ë¡ ì í리ì¼ì´ì
ì ê´ë ¨ ë¶ë¶ì ì
ë°ì´í¸í ì ììµëë¤.
+
+ìì²ìì `HeroCreate` *ë°ì´í° 모ë¸*ì ë°ì ì´ë¥¼ 기ë°ì¼ë¡ `Hero` *í
ì´ë¸ 모ë¸*ì ìì±í©ëë¤.
+
+ì´ ì *í
ì´ë¸ 모ë¸* `Hero`ë í´ë¼ì´ì¸í¸ìì ë³´ë¸ íë를 ê°ì§ë©°, ë°ì´í°ë² ì´ì¤ìì ìì±ë `id`ë í¬í¨í©ëë¤.
+
+ê·¸ë° ë¤ì í¨ì를 íµí´ ëì¼í *í
ì´ë¸ 모ë¸* `Hero`를 ë°íí©ëë¤. íì§ë§ `response_model`ë¡ `HeroPublic` *ë°ì´í° 모ë¸*ì ì ì¸í기 ë문ì, **FastAPI**ë `HeroPublic`ì ì¬ì©íì¬ ë°ì´í°ë¥¼ ê²ì¦íê³ ì§ë ¬íí©ëë¤.
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[56:62] hl[56:58] *}
+
+/// tip | í
+
+ì´ì **ë°í íì
주ì** `-> HeroPublic` ëì `response_model=HeroPublic`ì ì¬ì©í©ëë¤. ë°ííë ê°ì´ ì¤ì ë¡ `HeroPublic`ì´ *ìë기* ë문ì
ëë¤.
+
+ë§ì½ `-> HeroPublic`ì¼ë¡ ì ì¸íë¤ë©´, ìëí°ì 린í°ìì ë°íê°ì´ `HeroPublic`ì´ ìëë¼ `Hero`ë¼ê³ ê²½ê³ íì ê²ì
ëë¤. ì´ë ì ì í ê²½ê³ ì
ëë¤.
+
+`response_model`ì ì ì¸í¨ì¼ë¡ì¨ **FastAPI**ê° ì´ë¥¼ ì²ë¦¬íëë¡ íê³ , íì
ì´ë
¸í
ì´ì
ê³¼ ìëí° ë° ë¤ë¥¸ ë구ì ëììë ìí¥ì 미ì¹ì§ ìëë¡ ì¤ì í©ëë¤.
+
+///
+
+### `HeroPublic`ì¼ë¡ Heroes ì¡°íí기
+
+ì´ì ê³¼ ëì¼íê² `Hero`를 **ì¡°í**í ì ììµëë¤. ì´ë²ìë `response_model=list[HeroPublic]`ì ì¬ì©íì¬ ë°ì´í°ê° ì¬ë°ë¥´ê² ê²ì¦ëê³ ì§ë ¬íëëë¡ ë³´ì¥í©ëë¤.
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[65:72] hl[65] *}
+
+### `HeroPublic`ì¼ë¡ ë¨ì¼ Hero ì¡°íí기
+
+ë¨ì¼ heroì **ì¡°í**í ìë ììµëë¤:
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[75:80] hl[77] *}
+
+### `HeroUpdate`ë¡ Hero ìì í기
+
+**hero를 ìì **í ìë ììµëë¤. ì´ë¥¼ ìí´ HTTP `PATCH` ìì
ì ì¬ì©í©ëë¤.
+
+ì½ëììë í´ë¼ì´ì¸í¸ê° ë³´ë¸ ë°ì´í°ë¥¼ ëì
ë리 íí(`dict`)ë¡ ê°ì ¸ìµëë¤. ì´ë **í´ë¼ì´ì¸í¸ê° ë³´ë¸ ë°ì´í°ë§ í¬í¨**íë©°, 기본ê°ì¼ë¡ ë¤ì´ê°ë ê°ì ì ì¸í©ëë¤. ì´ë¥¼ ìí´ `exclude_unset=True`를 ì¬ì©í©ëë¤. ì´ê²ì´ 주ì íµì¬ì
ëë¤. ðª
+
+ê·¸ë° ë¤ì, `hero_db.sqlmodel_update(hero_data)`를 ì¬ì©íì¬ `hero_data`ì ë°ì´í°ë¥¼ `hero_db`ì ì
ë°ì´í¸í©ëë¤.
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[83:93] hl[83:84,88:89] *}
+
+### Hero ë¤ì ìì í기
+
+hero **ìì **ë ì´ì ê³¼ ê±°ì ëì¼í©ëë¤.
+
+ì´ë²ìë 모ë ê²ì 리í©í ë§íê³ ì¶ì ì구를 ë§ì¡±ìí¤ì§ 못í ê² ê°ìµëë¤. ð
+
+{* ../../docs_src/sql_databases/tutorial002_an_py310.py ln[96:103] hl[101] *}
+
+### ì í리ì¼ì´ì
ë¤ì ì¤íí기
+
+ë¤ì ëª
ë ¹ì ì¬ì©í´ ì í리ì¼ì´ì
ì ë¤ì ì¤íí ì ììµëë¤:
+
+
+
+```console
+$ fastapi dev main.py
+
+INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+
+
+`/docs` API UIë¡ ì´ëíë©´ ì
ë°ì´í¸ë ê²ì íì¸í ì ììµëë¤. í´ë¼ì´ì¸í¸ê° ìì
ì ìì±í ë `id`를 ì ê³µí íìê° ìê² ëë ë±ì ë³íë ë³´ì
ëë¤.
+
+
+

+
+
+## ìì½
+
+**SQLModel**ì ì¬ì©íì¬ SQL ë°ì´í°ë² ì´ì¤ì ìí¸ìì©íê³ , *ë°ì´í° 모ë¸* ë° *í
ì´ë¸ 모ë¸*ë¡ ì½ë를 ê°ìíí ì ììµëë¤.
+
+ë ë§ì ë´ì©ì ë°°ì°ê³ ì¶ë¤ë©´, **SQLModel** 문ì를 ì°¸ê³ íì¸ì. SQLModelì **FastAPI**ì í¨ê» ì¬ì©íë ê²ì ëí ë 긴 미ë íí 리ì¼ë ì ê³µí©ëë¤. ð